thirdweb 5.67.1-nightly-040e478ad6cf630dedf666eac7abeb668d323666-20241113000339 → 5.68.1-nightly-895b4d145fb0519febdb399abffea36208692d95-20241115000335

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 (238) hide show
  1. package/dist/cjs/adapters/eip1193/from-eip1193.js +149 -0
  2. package/dist/cjs/adapters/eip1193/from-eip1193.js.map +1 -0
  3. package/dist/cjs/adapters/eip1193/index.js +8 -0
  4. package/dist/cjs/adapters/eip1193/index.js.map +1 -0
  5. package/dist/cjs/adapters/eip1193/to-eip1193.js +122 -0
  6. package/dist/cjs/adapters/eip1193/to-eip1193.js.map +1 -0
  7. package/dist/cjs/adapters/eip1193/types.js +3 -0
  8. package/dist/cjs/adapters/eip1193/types.js.map +1 -0
  9. package/dist/cjs/exports/wallets.js +3 -1
  10. package/dist/cjs/exports/wallets.js.map +1 -1
  11. package/dist/cjs/exports/wallets.native.js +3 -1
  12. package/dist/cjs/exports/wallets.native.js.map +1 -1
  13. package/dist/cjs/react/core/hooks/wallets/useAdminWallet.js +1 -0
  14. package/dist/cjs/react/core/hooks/wallets/useAdminWallet.js.map +1 -1
  15. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +6 -7
  16. package/dist/cjs/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
  17. package/dist/cjs/react/web/wallets/shared/CoinbaseSDKConnection.js +2 -2
  18. package/dist/cjs/react/web/wallets/shared/CoinbaseSDKConnection.js.map +1 -1
  19. package/dist/cjs/transaction/actions/to-serializable-transaction.js +18 -0
  20. package/dist/cjs/transaction/actions/to-serializable-transaction.js.map +1 -1
  21. package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js +61 -43
  22. package/dist/cjs/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
  23. package/dist/cjs/utils/bigint.js +11 -0
  24. package/dist/cjs/utils/bigint.js.map +1 -1
  25. package/dist/cjs/utils/storage/webStorage.js +14 -4
  26. package/dist/cjs/utils/storage/webStorage.js.map +1 -1
  27. package/dist/cjs/version.js +1 -1
  28. package/dist/cjs/wallets/__generated__/getWalletInfo.js +23 -3
  29. package/dist/cjs/wallets/__generated__/getWalletInfo.js.map +1 -1
  30. package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/image.js +7 -0
  31. package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/image.js.map +1 -0
  32. package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/index.js +34 -0
  33. package/dist/cjs/wallets/__generated__/wallet/com.blazpay.wallet/index.js.map +1 -0
  34. package/dist/cjs/wallets/__generated__/wallet/com.crypto.wallet/image.js.map +1 -0
  35. package/dist/cjs/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.js +3 -3
  36. package/dist/cjs/wallets/__generated__/wallet/com.crypto.wallet/index.js.map +1 -0
  37. package/dist/cjs/wallets/__generated__/wallet/com.okex.wallet/index.js +1 -1
  38. package/dist/cjs/wallets/__generated__/wallet/com.okex.wallet/index.js.map +1 -1
  39. package/dist/cjs/wallets/__generated__/wallet/com.tomi/image.js +1 -1
  40. package/dist/cjs/wallets/__generated__/wallet/com.tomi/image.js.map +1 -1
  41. package/dist/cjs/wallets/__generated__/wallet/com.tomi/index.js +2 -2
  42. package/dist/cjs/wallets/__generated__/wallet/com.tomi/index.js.map +1 -1
  43. package/dist/cjs/wallets/__generated__/wallet/com.walletconnect.com/image.js +1 -1
  44. package/dist/cjs/wallets/__generated__/wallet/com.walletconnect.com/image.js.map +1 -1
  45. package/dist/cjs/wallets/__generated__/wallet/com.walletconnect.com/index.js +1 -1
  46. package/dist/cjs/wallets/__generated__/wallet/net.myrenegade/index.js +1 -1
  47. package/dist/cjs/wallets/__generated__/wallet/net.myrenegade/index.js.map +1 -1
  48. package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/image.js +7 -0
  49. package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/image.js.map +1 -0
  50. package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/index.js +34 -0
  51. package/dist/cjs/wallets/__generated__/wallet/nl.greenhood.wallet/index.js.map +1 -0
  52. package/dist/cjs/wallets/__generated__/wallet/social.gm2/image.js +7 -0
  53. package/dist/cjs/wallets/__generated__/wallet/{com.crypto → social.gm2}/image.js.map +1 -1
  54. package/dist/cjs/wallets/__generated__/wallet/social.gm2/index.js +34 -0
  55. package/dist/cjs/wallets/__generated__/wallet/social.gm2/index.js.map +1 -0
  56. package/dist/cjs/wallets/__generated__/wallet/xyz.abs/image.js +7 -0
  57. package/dist/cjs/wallets/__generated__/wallet/xyz.abs/image.js.map +1 -0
  58. package/dist/cjs/wallets/__generated__/wallet/xyz.abs/index.js +34 -0
  59. package/dist/cjs/wallets/__generated__/wallet/xyz.abs/index.js.map +1 -0
  60. package/dist/cjs/wallets/__generated__/wallet-infos.js +22 -2
  61. package/dist/cjs/wallets/__generated__/wallet-infos.js.map +1 -1
  62. package/dist/cjs/wallets/create-wallet.js +12 -4
  63. package/dist/cjs/wallets/create-wallet.js.map +1 -1
  64. package/dist/cjs/wallets/injected/index.js +55 -30
  65. package/dist/cjs/wallets/injected/index.js.map +1 -1
  66. package/dist/esm/adapters/eip1193/from-eip1193.js +146 -0
  67. package/dist/esm/adapters/eip1193/from-eip1193.js.map +1 -0
  68. package/dist/esm/adapters/eip1193/index.js +3 -0
  69. package/dist/esm/adapters/eip1193/index.js.map +1 -0
  70. package/dist/esm/adapters/eip1193/to-eip1193.js +119 -0
  71. package/dist/esm/adapters/eip1193/to-eip1193.js.map +1 -0
  72. package/dist/esm/adapters/eip1193/types.js +2 -0
  73. package/dist/esm/adapters/eip1193/types.js.map +1 -0
  74. package/dist/esm/exports/wallets.js +2 -0
  75. package/dist/esm/exports/wallets.js.map +1 -1
  76. package/dist/esm/exports/wallets.native.js +2 -0
  77. package/dist/esm/exports/wallets.native.js.map +1 -1
  78. package/dist/esm/react/core/hooks/wallets/useAdminWallet.js +1 -0
  79. package/dist/esm/react/core/hooks/wallets/useAdminWallet.js.map +1 -1
  80. package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js +6 -7
  81. package/dist/esm/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.js.map +1 -1
  82. package/dist/esm/react/web/wallets/shared/CoinbaseSDKConnection.js +2 -2
  83. package/dist/esm/react/web/wallets/shared/CoinbaseSDKConnection.js.map +1 -1
  84. package/dist/esm/transaction/actions/to-serializable-transaction.js +18 -0
  85. package/dist/esm/transaction/actions/to-serializable-transaction.js.map +1 -1
  86. package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js +62 -45
  87. package/dist/esm/transaction/actions/zksync/send-eip712-transaction.js.map +1 -1
  88. package/dist/esm/utils/bigint.js +9 -0
  89. package/dist/esm/utils/bigint.js.map +1 -1
  90. package/dist/esm/utils/storage/webStorage.js +14 -4
  91. package/dist/esm/utils/storage/webStorage.js.map +1 -1
  92. package/dist/esm/version.js +1 -1
  93. package/dist/esm/wallets/__generated__/getWalletInfo.js +23 -3
  94. package/dist/esm/wallets/__generated__/getWalletInfo.js.map +1 -1
  95. package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/image.js +5 -0
  96. package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/image.js.map +1 -0
  97. package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/index.js +31 -0
  98. package/dist/esm/wallets/__generated__/wallet/com.blazpay.wallet/index.js.map +1 -0
  99. package/dist/esm/wallets/__generated__/wallet/com.crypto.wallet/image.js.map +1 -0
  100. package/dist/esm/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.js +3 -3
  101. package/dist/esm/wallets/__generated__/wallet/com.crypto.wallet/index.js.map +1 -0
  102. package/dist/esm/wallets/__generated__/wallet/com.okex.wallet/index.js +1 -1
  103. package/dist/esm/wallets/__generated__/wallet/com.okex.wallet/index.js.map +1 -1
  104. package/dist/esm/wallets/__generated__/wallet/com.tomi/image.js +1 -1
  105. package/dist/esm/wallets/__generated__/wallet/com.tomi/image.js.map +1 -1
  106. package/dist/esm/wallets/__generated__/wallet/com.tomi/index.js +2 -2
  107. package/dist/esm/wallets/__generated__/wallet/com.tomi/index.js.map +1 -1
  108. package/dist/esm/wallets/__generated__/wallet/com.walletconnect.com/image.js +1 -1
  109. package/dist/esm/wallets/__generated__/wallet/com.walletconnect.com/image.js.map +1 -1
  110. package/dist/esm/wallets/__generated__/wallet/com.walletconnect.com/index.js +1 -1
  111. package/dist/esm/wallets/__generated__/wallet/net.myrenegade/index.js +1 -1
  112. package/dist/esm/wallets/__generated__/wallet/net.myrenegade/index.js.map +1 -1
  113. package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/image.js +5 -0
  114. package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/image.js.map +1 -0
  115. package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/index.js +31 -0
  116. package/dist/esm/wallets/__generated__/wallet/nl.greenhood.wallet/index.js.map +1 -0
  117. package/dist/esm/wallets/__generated__/wallet/social.gm2/image.js +5 -0
  118. package/dist/esm/wallets/__generated__/wallet/{com.crypto → social.gm2}/image.js.map +1 -1
  119. package/dist/esm/wallets/__generated__/wallet/social.gm2/index.js +31 -0
  120. package/dist/esm/wallets/__generated__/wallet/social.gm2/index.js.map +1 -0
  121. package/dist/esm/wallets/__generated__/wallet/xyz.abs/image.js +5 -0
  122. package/dist/esm/wallets/__generated__/wallet/xyz.abs/image.js.map +1 -0
  123. package/dist/esm/wallets/__generated__/wallet/xyz.abs/index.js +31 -0
  124. package/dist/esm/wallets/__generated__/wallet/xyz.abs/index.js.map +1 -0
  125. package/dist/esm/wallets/__generated__/wallet-infos.js +22 -2
  126. package/dist/esm/wallets/__generated__/wallet-infos.js.map +1 -1
  127. package/dist/esm/wallets/create-wallet.js +12 -4
  128. package/dist/esm/wallets/create-wallet.js.map +1 -1
  129. package/dist/esm/wallets/injected/index.js +53 -28
  130. package/dist/esm/wallets/injected/index.js.map +1 -1
  131. package/dist/types/adapters/eip1193/from-eip1193.d.ts +48 -0
  132. package/dist/types/adapters/eip1193/from-eip1193.d.ts.map +1 -0
  133. package/dist/types/adapters/eip1193/index.d.ts +4 -0
  134. package/dist/types/adapters/eip1193/index.d.ts.map +1 -0
  135. package/dist/types/adapters/eip1193/to-eip1193.d.ts +48 -0
  136. package/dist/types/adapters/eip1193/to-eip1193.d.ts.map +1 -0
  137. package/dist/types/adapters/eip1193/types.d.ts +6 -0
  138. package/dist/types/adapters/eip1193/types.d.ts.map +1 -0
  139. package/dist/types/analytics/track/transaction.d.ts +1 -1
  140. package/dist/types/analytics/track/transaction.d.ts.map +1 -1
  141. package/dist/types/exports/wallets.d.ts +1 -0
  142. package/dist/types/exports/wallets.d.ts.map +1 -1
  143. package/dist/types/exports/wallets.native.d.ts +1 -0
  144. package/dist/types/exports/wallets.native.d.ts.map +1 -1
  145. package/dist/types/react/core/hooks/wallets/useAdminWallet.d.ts +1 -0
  146. package/dist/types/react/core/hooks/wallets/useAdminWallet.d.ts.map +1 -1
  147. package/dist/types/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.d.ts.map +1 -1
  148. package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts +3 -4
  149. package/dist/types/react/web/wallets/shared/CoinbaseSDKConnection.d.ts.map +1 -1
  150. package/dist/types/transaction/actions/to-serializable-transaction.d.ts.map +1 -1
  151. package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts +10 -0
  152. package/dist/types/transaction/actions/zksync/send-eip712-transaction.d.ts.map +1 -1
  153. package/dist/types/utils/bigint.d.ts +6 -0
  154. package/dist/types/utils/bigint.d.ts.map +1 -1
  155. package/dist/types/utils/storage/webStorage.d.ts.map +1 -1
  156. package/dist/types/version.d.ts +1 -1
  157. package/dist/types/wallets/__generated__/getWalletInfo.d.ts.map +1 -1
  158. package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/image.d.ts +3 -0
  159. package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/image.d.ts.map +1 -0
  160. package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/index.d.ts +29 -0
  161. package/dist/types/wallets/__generated__/wallet/com.blazpay.wallet/index.d.ts.map +1 -0
  162. package/dist/types/wallets/__generated__/wallet/com.crypto.wallet/image.d.ts.map +1 -0
  163. package/dist/types/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.d.ts +3 -3
  164. package/dist/types/wallets/__generated__/wallet/com.crypto.wallet/index.d.ts.map +1 -0
  165. package/dist/types/wallets/__generated__/wallet/com.okex.wallet/index.d.ts +1 -1
  166. package/dist/types/wallets/__generated__/wallet/com.tomi/image.d.ts +1 -1
  167. package/dist/types/wallets/__generated__/wallet/com.tomi/image.d.ts.map +1 -1
  168. package/dist/types/wallets/__generated__/wallet/com.tomi/index.d.ts +2 -2
  169. package/dist/types/wallets/__generated__/wallet/com.walletconnect.com/image.d.ts +1 -1
  170. package/dist/types/wallets/__generated__/wallet/com.walletconnect.com/image.d.ts.map +1 -1
  171. package/dist/types/wallets/__generated__/wallet/com.walletconnect.com/index.d.ts +1 -1
  172. package/dist/types/wallets/__generated__/wallet/net.myrenegade/index.d.ts +1 -1
  173. package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/image.d.ts +3 -0
  174. package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/image.d.ts.map +1 -0
  175. package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/index.d.ts +29 -0
  176. package/dist/types/wallets/__generated__/wallet/nl.greenhood.wallet/index.d.ts.map +1 -0
  177. package/dist/types/wallets/__generated__/wallet/social.gm2/image.d.ts +3 -0
  178. package/dist/types/wallets/__generated__/wallet/social.gm2/image.d.ts.map +1 -0
  179. package/dist/types/wallets/__generated__/wallet/social.gm2/index.d.ts +29 -0
  180. package/dist/types/wallets/__generated__/wallet/{com.crypto → social.gm2}/index.d.ts.map +1 -1
  181. package/dist/types/wallets/__generated__/wallet/xyz.abs/image.d.ts +3 -0
  182. package/dist/types/wallets/__generated__/wallet/xyz.abs/image.d.ts.map +1 -0
  183. package/dist/types/wallets/__generated__/wallet/xyz.abs/index.d.ts +29 -0
  184. package/dist/types/wallets/__generated__/wallet/xyz.abs/index.d.ts.map +1 -0
  185. package/dist/types/wallets/__generated__/wallet-ids.d.ts +2 -2
  186. package/dist/types/wallets/__generated__/wallet-ids.d.ts.map +1 -1
  187. package/dist/types/wallets/__generated__/wallet-infos.d.ts +18 -2
  188. package/dist/types/wallets/__generated__/wallet-infos.d.ts.map +1 -1
  189. package/dist/types/wallets/create-wallet.d.ts.map +1 -1
  190. package/dist/types/wallets/getAllWalletsList.d.ts +18 -2
  191. package/dist/types/wallets/getAllWalletsList.d.ts.map +1 -1
  192. package/dist/types/wallets/injected/index.d.ts +15 -8
  193. package/dist/types/wallets/injected/index.d.ts.map +1 -1
  194. package/package.json +1 -1
  195. package/src/adapters/eip1193/from-eip1193.test.ts +138 -0
  196. package/src/adapters/eip1193/from-eip1193.ts +171 -0
  197. package/src/adapters/eip1193/index.ts +11 -0
  198. package/src/adapters/eip1193/to-eip1193.test.ts +187 -0
  199. package/src/adapters/eip1193/to-eip1193.ts +132 -0
  200. package/src/adapters/eip1193/types.ts +9 -0
  201. package/src/analytics/track/transaction.ts +1 -1
  202. package/src/exports/wallets.native.ts +3 -0
  203. package/src/exports/wallets.ts +3 -0
  204. package/src/react/core/hooks/wallets/useAdminWallet.ts +1 -0
  205. package/src/react/web/ui/ConnectWallet/Modal/AnyWalletConnectUI.tsx +21 -22
  206. package/src/react/web/wallets/shared/CoinbaseSDKConnection.tsx +3 -4
  207. package/src/transaction/actions/to-serializable-transaction.ts +21 -0
  208. package/src/transaction/actions/zksync/send-eip712-transaction.ts +78 -53
  209. package/src/utils/bigint.ts +41 -0
  210. package/src/utils/storage/webStorage.ts +13 -4
  211. package/src/version.ts +1 -1
  212. package/src/wallets/__generated__/getWalletInfo.ts +39 -3
  213. package/src/wallets/__generated__/wallet/com.blazpay.wallet/image.ts +7 -0
  214. package/src/wallets/__generated__/wallet/com.blazpay.wallet/index.ts +32 -0
  215. package/src/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/index.ts +4 -3
  216. package/src/wallets/__generated__/wallet/com.okex.wallet/index.ts +1 -1
  217. package/src/wallets/__generated__/wallet/com.tomi/image.ts +1 -1
  218. package/src/wallets/__generated__/wallet/com.tomi/index.ts +2 -2
  219. package/src/wallets/__generated__/wallet/com.walletconnect.com/image.ts +1 -1
  220. package/src/wallets/__generated__/wallet/com.walletconnect.com/index.ts +1 -1
  221. package/src/wallets/__generated__/wallet/net.myrenegade/index.ts +1 -1
  222. package/src/wallets/__generated__/wallet/nl.greenhood.wallet/image.ts +7 -0
  223. package/src/wallets/__generated__/wallet/nl.greenhood.wallet/index.ts +32 -0
  224. package/src/wallets/__generated__/wallet/social.gm2/image.ts +7 -0
  225. package/src/wallets/__generated__/wallet/social.gm2/index.ts +32 -0
  226. package/src/wallets/__generated__/wallet/xyz.abs/image.ts +7 -0
  227. package/src/wallets/__generated__/wallet/xyz.abs/index.ts +31 -0
  228. package/src/wallets/__generated__/wallet-ids.ts +11 -5
  229. package/src/wallets/__generated__/wallet-infos.ts +22 -2
  230. package/src/wallets/create-wallet.ts +11 -8
  231. package/src/wallets/injected/index.ts +75 -42
  232. package/dist/cjs/wallets/__generated__/wallet/com.crypto/index.js.map +0 -1
  233. package/dist/esm/wallets/__generated__/wallet/com.crypto/index.js.map +0 -1
  234. package/dist/types/wallets/__generated__/wallet/com.crypto/image.d.ts.map +0 -1
  235. /package/dist/cjs/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.js +0 -0
  236. /package/dist/esm/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.js +0 -0
  237. /package/dist/types/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.d.ts +0 -0
  238. /package/src/wallets/__generated__/wallet/{com.crypto → com.crypto.wallet}/image.ts +0 -0
@@ -0,0 +1,171 @@
1
+ import * as ox__Hex from "ox/Hex";
2
+ import { trackConnect } from "../../analytics/track/connect.js";
3
+ import type { Chain } from "../../chains/types.js";
4
+ import { getCachedChainIfExists } from "../../chains/utils.js";
5
+ import {
6
+ autoConnectEip1193Wallet,
7
+ connectEip1193Wallet,
8
+ } from "../../wallets/injected/index.js";
9
+ import type { Account, Wallet } from "../../wallets/interfaces/wallet.js";
10
+ import { createWalletEmitter } from "../../wallets/wallet-emitter.js";
11
+ import type { WalletId } from "../../wallets/wallet-types.js";
12
+ import type { EIP1193Provider } from "./types.js";
13
+
14
+ /**
15
+ * Options for creating an EIP-1193 provider adapter.
16
+ */
17
+ export type FromEip1193AdapterOptions = {
18
+ provider: EIP1193Provider | (() => Promise<EIP1193Provider>);
19
+ walletId?: WalletId;
20
+ };
21
+
22
+ /**
23
+ * Creates a Thirdweb wallet from an EIP-1193 compatible provider.
24
+ *
25
+ * This adapter allows you to use any EIP-1193 provider (like MetaMask, WalletConnect, etc.) as a Thirdweb wallet.
26
+ * It handles all the necessary conversions between the EIP-1193 interface and Thirdweb's wallet interface.
27
+ *
28
+ * @param options - Configuration options for creating the wallet adapter
29
+ * @param options.provider - An EIP-1193 compatible provider or a function that returns one
30
+ * @param options.walletId - Optional custom wallet ID to identify this provider (defaults to "adapter")
31
+ * @returns A Thirdweb wallet instance that wraps the EIP-1193 provider
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * import { EIP1193 } from "thirdweb/wallets";
36
+ *
37
+ * // Create a Thirdweb wallet from MetaMask's provider
38
+ * const wallet = EIP1193.fromProvider({
39
+ * provider: window.ethereum,
40
+ * walletId: "io.metamask"
41
+ * });
42
+ *
43
+ * // Use like any other Thirdweb wallet
44
+ * const account = await wallet.connect({
45
+ * client: createThirdwebClient({ clientId: "..." })
46
+ * });
47
+ *
48
+ * // Sign messages
49
+ * await account.signMessage({ message: "Hello World" });
50
+ *
51
+ * // Send transactions
52
+ * await account.sendTransaction({
53
+ * to: "0x...",
54
+ * value: 1000000000000000000n
55
+ * });
56
+ * ```
57
+ */
58
+ export function fromProvider(options: FromEip1193AdapterOptions): Wallet {
59
+ const id: WalletId = options.walletId ?? "adapter";
60
+ const emitter = createWalletEmitter();
61
+ let account: Account | undefined = undefined;
62
+ let chain: Chain | undefined = undefined;
63
+ let provider: EIP1193Provider | undefined = undefined;
64
+ const getProvider = async () => {
65
+ if (!provider) {
66
+ provider =
67
+ typeof options.provider === "function"
68
+ ? await options.provider()
69
+ : options.provider;
70
+ }
71
+ return provider;
72
+ };
73
+
74
+ const unsubscribeChain = emitter.subscribe("chainChanged", (newChain) => {
75
+ chain = newChain;
76
+ });
77
+
78
+ function reset() {
79
+ account = undefined;
80
+ chain = undefined;
81
+ }
82
+
83
+ let handleDisconnect = async () => {};
84
+
85
+ const unsubscribeDisconnect = emitter.subscribe("disconnect", () => {
86
+ reset();
87
+ unsubscribeChain();
88
+ unsubscribeDisconnect();
89
+ });
90
+
91
+ emitter.subscribe("accountChanged", (_account) => {
92
+ account = _account;
93
+ });
94
+
95
+ let handleSwitchChain: (c: Chain) => Promise<void> = async (c) => {
96
+ await provider?.request({
97
+ method: "wallet_switchEthereumChain",
98
+ params: [{ chainId: ox__Hex.fromNumber(c.id) }],
99
+ });
100
+ };
101
+
102
+ return {
103
+ id,
104
+ subscribe: emitter.subscribe,
105
+ getConfig: () => undefined,
106
+ getChain() {
107
+ if (!chain) {
108
+ return undefined;
109
+ }
110
+
111
+ chain = getCachedChainIfExists(chain.id) || chain;
112
+ return chain;
113
+ },
114
+ getAccount: () => account,
115
+ connect: async (connectOptions) => {
116
+ const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
117
+ await connectEip1193Wallet({
118
+ id,
119
+ provider: await getProvider(),
120
+ client: connectOptions.client,
121
+ chain: connectOptions.chain,
122
+ emitter,
123
+ });
124
+ // set the states
125
+ account = connectedAccount;
126
+ chain = connectedChain;
127
+ handleDisconnect = doDisconnect;
128
+ handleSwitchChain = doSwitchChain;
129
+ emitter.emit("onConnect", connectOptions);
130
+ trackConnect({
131
+ client: connectOptions.client,
132
+ walletType: id,
133
+ walletAddress: account.address,
134
+ });
135
+ // return account
136
+ return account;
137
+ },
138
+ autoConnect: async (connectOptions) => {
139
+ const [connectedAccount, connectedChain, doDisconnect, doSwitchChain] =
140
+ await autoConnectEip1193Wallet({
141
+ id,
142
+ provider: await getProvider(),
143
+ emitter,
144
+ chain: connectOptions.chain,
145
+ client: connectOptions.client,
146
+ });
147
+ // set the states
148
+ account = connectedAccount;
149
+ chain = connectedChain;
150
+ handleDisconnect = doDisconnect;
151
+ handleSwitchChain = doSwitchChain;
152
+ emitter.emit("onConnect", connectOptions);
153
+ trackConnect({
154
+ client: connectOptions.client,
155
+ walletType: id,
156
+ walletAddress: account.address,
157
+ });
158
+ // return account
159
+ return account;
160
+ },
161
+ disconnect: async () => {
162
+ reset();
163
+ await handleDisconnect();
164
+ emitter.emit("disconnect", undefined);
165
+ },
166
+ switchChain: async (c) => {
167
+ await handleSwitchChain(c);
168
+ emitter.emit("chainChanged", c);
169
+ },
170
+ };
171
+ }
@@ -0,0 +1,11 @@
1
+ export {
2
+ type FromEip1193AdapterOptions,
3
+ fromProvider,
4
+ } from "./from-eip1193.js";
5
+
6
+ export {
7
+ type ToEip1193ProviderOptions,
8
+ toProvider,
9
+ } from "./to-eip1193.js";
10
+
11
+ export type { EIP1193Provider } from "./types.js";
@@ -0,0 +1,187 @@
1
+ import * as ox__Hex from "ox/Hex";
2
+ import { describe, expect, test, vi } from "vitest";
3
+ import { TEST_WALLET_B } from "~test/addresses.js";
4
+ import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
5
+ import { typedData } from "~test/typed-data.js";
6
+ import { ANVIL_CHAIN } from "../../../test/src/chains.js";
7
+ import { TEST_CLIENT } from "../../../test/src/test-clients.js";
8
+ import { prepareTransaction } from "../../transaction/prepare-transaction.js";
9
+ import type { Account, Wallet } from "../../wallets/interfaces/wallet.js";
10
+ import { createWalletEmitter } from "../../wallets/wallet-emitter.js";
11
+ import { toProvider } from "./to-eip1193.js";
12
+
13
+ describe("toProvider", () => {
14
+ const mockAccount: Account = TEST_ACCOUNT_A;
15
+ const emitter = createWalletEmitter();
16
+
17
+ const mockWallet: Wallet = {
18
+ id: "io.metamask",
19
+ subscribe: emitter.subscribe,
20
+ connect: vi.fn().mockResolvedValue(mockAccount),
21
+ autoConnect: vi.fn().mockResolvedValue(mockAccount),
22
+ disconnect: vi.fn(),
23
+ getAccount: () => mockAccount,
24
+ getChain: () => ANVIL_CHAIN,
25
+ getConfig: () => undefined,
26
+ switchChain: vi.fn(),
27
+ };
28
+
29
+ test("should create a provider with the correct interface", () => {
30
+ const provider = toProvider({
31
+ wallet: mockWallet,
32
+ chain: ANVIL_CHAIN,
33
+ client: TEST_CLIENT,
34
+ });
35
+
36
+ expect(provider.on).toBeDefined();
37
+ expect(provider.removeListener).toBeDefined();
38
+ expect(provider.request).toBeDefined();
39
+ });
40
+
41
+ test("should handle eth_requestAccounts", async () => {
42
+ const provider = toProvider({
43
+ wallet: mockWallet,
44
+ chain: ANVIL_CHAIN,
45
+ client: TEST_CLIENT,
46
+ });
47
+
48
+ const accounts = await provider.request({
49
+ method: "eth_requestAccounts",
50
+ params: [],
51
+ });
52
+
53
+ expect(accounts).toEqual([mockAccount.address]);
54
+ });
55
+
56
+ test("should handle eth_accounts", async () => {
57
+ const provider = toProvider({
58
+ wallet: mockWallet,
59
+ chain: ANVIL_CHAIN,
60
+ client: TEST_CLIENT,
61
+ });
62
+
63
+ const accounts = await provider.request({
64
+ method: "eth_accounts",
65
+ params: [],
66
+ });
67
+
68
+ expect(accounts).toEqual([mockAccount.address]);
69
+ });
70
+
71
+ test("should handle personal_sign", async () => {
72
+ const provider = toProvider({
73
+ wallet: mockWallet,
74
+ chain: ANVIL_CHAIN,
75
+ client: TEST_CLIENT,
76
+ });
77
+
78
+ const message = "0x48656c6c6f20776f726c64";
79
+ const result = await provider.request({
80
+ method: "personal_sign",
81
+ params: [message, mockAccount.address],
82
+ });
83
+
84
+ expect(result).toEqual(
85
+ "0x15a3fe3974ebe469b00e67ad67bb3860ad3fc3d739287cdbc4ba558ce7130bee205e5e38d6ef156f1ff6a4df17bfa72a1e61c429f92613f3efbc58394d00c9891b",
86
+ );
87
+ });
88
+
89
+ test("should handle eth_signTypedData_v4", async () => {
90
+ const provider = toProvider({
91
+ wallet: mockWallet,
92
+ chain: ANVIL_CHAIN,
93
+ client: TEST_CLIENT,
94
+ });
95
+
96
+ const result = await provider.request({
97
+ method: "eth_signTypedData_v4",
98
+ params: [mockAccount.address, JSON.stringify(typedData.basic)],
99
+ });
100
+
101
+ expect(result).toEqual(
102
+ "0x32f3d5975ba38d6c2fba9b95d5cbed1febaa68003d3d588d51f2de522ad54117760cfc249470a75232552e43991f53953a3d74edf6944553c6bef2469bb9e5921b",
103
+ );
104
+ });
105
+
106
+ test("should handle eth_sendTransaction", async () => {
107
+ const provider = toProvider({
108
+ wallet: mockWallet,
109
+ chain: ANVIL_CHAIN,
110
+ client: TEST_CLIENT,
111
+ });
112
+
113
+ const tx = prepareTransaction({
114
+ chain: ANVIL_CHAIN,
115
+ client: TEST_CLIENT,
116
+ value: 100n,
117
+ to: TEST_WALLET_B,
118
+ });
119
+
120
+ const result = await provider.request({
121
+ method: "eth_sendTransaction",
122
+ params: [tx],
123
+ });
124
+
125
+ expect(ox__Hex.validate(result)).toBe(true);
126
+ });
127
+
128
+ test("should handle eth_estimateGas", async () => {
129
+ const provider = toProvider({
130
+ wallet: mockWallet,
131
+ chain: ANVIL_CHAIN,
132
+ client: TEST_CLIENT,
133
+ });
134
+
135
+ const tx = prepareTransaction({
136
+ chain: ANVIL_CHAIN,
137
+ client: TEST_CLIENT,
138
+ value: 100n,
139
+ to: TEST_WALLET_B,
140
+ });
141
+
142
+ const result = await provider.request({
143
+ method: "eth_estimateGas",
144
+ params: [tx],
145
+ });
146
+
147
+ expect(result).toBeGreaterThan(0n);
148
+ });
149
+
150
+ test("should throw error when account is not connected", async () => {
151
+ const walletWithoutAccount = {
152
+ ...mockWallet,
153
+ getAccount: () => undefined,
154
+ };
155
+
156
+ const provider = toProvider({
157
+ wallet: walletWithoutAccount,
158
+ chain: ANVIL_CHAIN,
159
+ client: TEST_CLIENT,
160
+ });
161
+
162
+ await expect(
163
+ provider.request({
164
+ method: "eth_accounts",
165
+ params: [],
166
+ }),
167
+ ).rejects.toThrow("Account not connected");
168
+ });
169
+
170
+ test("should use custom connect override when provided", async () => {
171
+ const customConnect = vi.fn().mockResolvedValue(mockAccount);
172
+
173
+ const provider = toProvider({
174
+ wallet: mockWallet,
175
+ chain: ANVIL_CHAIN,
176
+ client: TEST_CLIENT,
177
+ connectOverride: customConnect,
178
+ });
179
+
180
+ await provider.request({
181
+ method: "eth_requestAccounts",
182
+ params: [],
183
+ });
184
+
185
+ expect(customConnect).toHaveBeenCalledWith(mockWallet);
186
+ });
187
+ });
@@ -0,0 +1,132 @@
1
+ import type { Account } from "viem/accounts";
2
+
3
+ import type { Chain } from "../../chains/types.js";
4
+ import type { ThirdwebClient } from "../../client/client.js";
5
+ import { getRpcClient } from "../../rpc/rpc.js";
6
+ import { estimateGas } from "../../transaction/actions/estimate-gas.js";
7
+ import { sendTransaction } from "../../transaction/actions/send-transaction.js";
8
+ import { prepareTransaction } from "../../transaction/prepare-transaction.js";
9
+ import type { Wallet } from "../../wallets/interfaces/wallet.js";
10
+ import type { EIP1193Provider } from "./types.js";
11
+
12
+ export type ToEip1193ProviderOptions = {
13
+ wallet: Wallet;
14
+ chain: Chain;
15
+ client: ThirdwebClient;
16
+ connectOverride?: (wallet: Wallet) => Promise<Account>;
17
+ };
18
+
19
+ /**
20
+ * Converts a Thirdweb wallet into an EIP-1193 compatible provider.
21
+ *
22
+ * This adapter allows you to use a Thirdweb wallet with any library or dApp that expects an EIP-1193 provider.
23
+ * The provider implements the standard EIP-1193 interface including request handling and event subscription.
24
+ *
25
+ * @param options - Configuration options for creating the provider
26
+ * @param options.wallet - The Thirdweb wallet to adapt into a provider
27
+ * @param options.chain - The blockchain chain to connect to
28
+ * @param options.client - The Thirdweb client instance
29
+ * @param options.connectOverride - Optional custom connect handler to override default connection behavior
30
+ * @returns An EIP-1193 compatible provider that wraps the Thirdweb wallet
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * import { EIP1193 } from "thirdweb/wallets";
35
+ *
36
+ * // Create an EIP-1193 provider from a Thirdweb wallet
37
+ * const provider = EIP1193.toProvider({
38
+ * wallet,
39
+ * chain: ethereum,
40
+ * client: createThirdwebClient({ clientId: "..." })
41
+ * });
42
+ *
43
+ * // Use with any EIP-1193 compatible library
44
+ * const accounts = await provider.request({
45
+ * method: "eth_requestAccounts"
46
+ * });
47
+ *
48
+ * // Listen for events
49
+ * provider.on("accountsChanged", (accounts) => {
50
+ * console.log("Active accounts:", accounts);
51
+ * });
52
+ * ```
53
+ */
54
+ export function toProvider(options: ToEip1193ProviderOptions): EIP1193Provider {
55
+ const { chain, client, wallet, connectOverride } = options;
56
+ const rpcClient = getRpcClient({ client, chain });
57
+ return {
58
+ on: wallet.subscribe,
59
+ removeListener: () => {
60
+ // should invoke the return fn from subscribe instead
61
+ },
62
+ request: async (request) => {
63
+ if (request.method === "eth_sendTransaction") {
64
+ const account = wallet.getAccount();
65
+ if (!account) {
66
+ throw new Error("Account not connected");
67
+ }
68
+ const result = await sendTransaction({
69
+ transaction: prepareTransaction({
70
+ ...request.params[0],
71
+ chain,
72
+ client,
73
+ }),
74
+ account: account,
75
+ });
76
+ return result.transactionHash;
77
+ }
78
+ if (request.method === "eth_estimateGas") {
79
+ const account = wallet.getAccount();
80
+ if (!account) {
81
+ throw new Error("Account not connected");
82
+ }
83
+ return estimateGas({
84
+ transaction: prepareTransaction({
85
+ ...request.params[0],
86
+ chain,
87
+ client,
88
+ }),
89
+ account,
90
+ });
91
+ }
92
+ if (request.method === "personal_sign") {
93
+ const account = wallet.getAccount();
94
+ if (!account) {
95
+ throw new Error("Account not connected");
96
+ }
97
+ return account.signMessage({
98
+ message: {
99
+ raw: request.params[0],
100
+ },
101
+ });
102
+ }
103
+ if (request.method === "eth_signTypedData_v4") {
104
+ const account = wallet.getAccount();
105
+ if (!account) {
106
+ throw new Error("Account not connected");
107
+ }
108
+ const data = JSON.parse(request.params[1]);
109
+ return account.signTypedData(data);
110
+ }
111
+ if (request.method === "eth_accounts") {
112
+ const account = wallet.getAccount();
113
+ if (!account) {
114
+ throw new Error("Account not connected");
115
+ }
116
+ return [account.address];
117
+ }
118
+ if (request.method === "eth_requestAccounts") {
119
+ const account = connectOverride
120
+ ? await connectOverride(wallet)
121
+ : await wallet.connect({
122
+ client,
123
+ });
124
+ if (!account) {
125
+ throw new Error("Unable to connect wallet");
126
+ }
127
+ return [account.address];
128
+ }
129
+ return rpcClient(request);
130
+ },
131
+ };
132
+ }
@@ -0,0 +1,9 @@
1
+ // loose interface on purpose to adapt to any version of viem, ethers, ox, web3js, etc
2
+ export type EIP1193Provider = {
3
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
4
+ on(event: any, listener: (params: any) => any): void;
5
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
6
+ removeListener(event: any, listener: (params: any) => any): void;
7
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
8
+ request: (params: any) => Promise<any>;
9
+ };
@@ -9,7 +9,7 @@ type TransactionEvent = {
9
9
  ecosystem?: Ecosystem;
10
10
  transactionHash?: string;
11
11
  walletAddress?: string;
12
- walletType?: WalletId;
12
+ walletType?: WalletId | ({} & string);
13
13
  chainId?: number;
14
14
  contractAddress?: string;
15
15
  functionName?: string;
@@ -134,6 +134,9 @@ export type {
134
134
  WalletConnectSession,
135
135
  } from "../wallets/wallet-connect/receiver/types.js";
136
136
 
137
+ // eip1193
138
+ export * as EIP1193 from "../adapters/eip1193/index.js";
139
+
137
140
  // NOT SUPPORTED
138
141
 
139
142
  export const injectedProvider = () => {
@@ -144,6 +144,9 @@ export type {
144
144
  WalletConnectSession,
145
145
  } from "../wallets/wallet-connect/receiver/types.js";
146
146
 
147
+ // eip1193
148
+ export * as EIP1193 from "../adapters/eip1193/index.js";
149
+
147
150
  // WEB ONLY EXPORTS
148
151
 
149
152
  // injected
@@ -5,6 +5,7 @@ import { useConnectedWallets } from "./useConnectedWallets.js";
5
5
  * Get the admin wallet for the active wallet
6
6
  * Useful for smart wallets to get the underlying personal account
7
7
  * @returns The admin wallet for the active wallet, or the active wallet if it doesn't have an admin account
8
+ * @walletConnection
8
9
  */
9
10
  export function useAdminWallet() {
10
11
  const activeWallet = useActiveWallet();
@@ -9,7 +9,6 @@ import type {
9
9
  InjectedSupportedWalletIds,
10
10
  WCSupportedWalletIds,
11
11
  } from "../../../../../wallets/__generated__/wallet-ids.js";
12
- import { COINBASE } from "../../../../../wallets/constants.js";
13
12
  import { isEcosystemWallet } from "../../../../../wallets/ecosystem/is-ecosystem-wallet.js";
14
13
  import { getInstalledWalletProviders } from "../../../../../wallets/injected/mipdStore.js";
15
14
  import type { Wallet } from "../../../../../wallets/interfaces/wallet.js";
@@ -197,27 +196,6 @@ export function AnyWalletConnectUI(props: {
197
196
  );
198
197
  }
199
198
 
200
- // coinbase wallet sdk
201
- if (props.wallet.id === COINBASE) {
202
- return (
203
- <Suspense fallback={<LoadingScreen />}>
204
- <CoinbaseSDKWalletConnectUI
205
- locale={locale}
206
- onGetStarted={() => {
207
- setScreen("get-started");
208
- }}
209
- onBack={props.onBack}
210
- done={props.done}
211
- wallet={props.wallet as Wallet<typeof COINBASE>}
212
- walletInfo={walletInfo.data}
213
- chain={props.chain}
214
- client={props.client}
215
- size={props.size}
216
- />
217
- </Suspense>
218
- );
219
- }
220
-
221
199
  // wallet connect
222
200
  if (walletInfo.data.mobile.native || walletInfo.data.mobile.universal) {
223
201
  return (
@@ -294,6 +272,27 @@ export function AnyWalletConnectUI(props: {
294
272
  );
295
273
  }
296
274
 
275
+ // any other known wallet
276
+ if (props.wallet.id) {
277
+ return (
278
+ <Suspense fallback={<LoadingScreen />}>
279
+ <CoinbaseSDKWalletConnectUI
280
+ locale={locale}
281
+ onGetStarted={() => {
282
+ setScreen("get-started");
283
+ }}
284
+ onBack={props.onBack}
285
+ done={props.done}
286
+ wallet={props.wallet}
287
+ walletInfo={walletInfo.data}
288
+ chain={props.chain}
289
+ client={props.client}
290
+ size={props.size}
291
+ />
292
+ </Suspense>
293
+ );
294
+ }
295
+
297
296
  // if can't connect in any way - show get started screen
298
297
  return (
299
298
  <GetStartedScreen
@@ -1,7 +1,6 @@
1
1
  import { useCallback, useEffect, useRef, useState } from "react";
2
2
  import type { Chain } from "../../../../chains/types.js";
3
3
  import type { ThirdwebClient } from "../../../../client/client.js";
4
- import type { COINBASE } from "../../../../wallets/constants.js";
5
4
  import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
6
5
  import type { WalletInfo } from "../../../../wallets/wallet-info.js";
7
6
  import type { InjectedWalletLocale } from "../injected/locale/types.js";
@@ -10,12 +9,12 @@ import { ConnectingScreen } from "./ConnectingScreen.js";
10
9
  /**
11
10
  * @internal
12
11
  */
13
- function CoinbaseSDKWalletConnectUI(props: {
12
+ function ExternalWalletConnectUI(props: {
14
13
  onBack?: () => void;
15
14
  onGetStarted: () => void;
16
15
  done: () => void;
17
16
  locale: InjectedWalletLocale;
18
- wallet: Wallet<typeof COINBASE>;
17
+ wallet: Wallet;
19
18
  walletInfo: WalletInfo;
20
19
  client: ThirdwebClient;
21
20
  chain: Chain | undefined;
@@ -70,4 +69,4 @@ function CoinbaseSDKWalletConnectUI(props: {
70
69
  );
71
70
  }
72
71
 
73
- export default CoinbaseSDKWalletConnectUI;
72
+ export default ExternalWalletConnectUI;
@@ -1,6 +1,8 @@
1
1
  import type { TransactionSerializable } from "viem";
2
2
  import { getGasOverridesForTransaction } from "../../gas/fee-data.js";
3
3
  import { getRpcClient } from "../../rpc/rpc.js";
4
+ import { getAddress } from "../../utils/address.js";
5
+ import { isZkSyncChain } from "../../utils/any-evm/zksync/isZkSyncChain.js";
4
6
  import { resolvePromisedValue } from "../../utils/promise/resolve-promised-value.js";
5
7
  import type { PreparedTransaction } from "../prepare-transaction.js";
6
8
  import { encode } from "./encode.js";
@@ -45,6 +47,25 @@ export type ToSerializableTransactionOptions = {
45
47
  export async function toSerializableTransaction(
46
48
  options: ToSerializableTransactionOptions,
47
49
  ) {
50
+ // zk chains require a different rpc method for gas estimation and gas fees
51
+ const isZkSync = await isZkSyncChain(options.transaction.chain);
52
+ if (isZkSync) {
53
+ const { getZkGasFees } = await import(
54
+ "./zksync/send-eip712-transaction.js"
55
+ );
56
+ const { gas, maxFeePerGas, maxPriorityFeePerGas } = await getZkGasFees({
57
+ transaction: options.transaction,
58
+ from: options.from ? getAddress(options.from) : undefined,
59
+ });
60
+ // passing these values here will avoid re-fetching them below
61
+ options.transaction = {
62
+ ...options.transaction,
63
+ gas,
64
+ maxFeePerGas,
65
+ maxPriorityFeePerGas,
66
+ };
67
+ }
68
+
48
69
  const rpcRequest = getRpcClient(options.transaction);
49
70
  const chainId = options.transaction.chain.id;
50
71
  const from = options.from;