thirdweb 5.83.2-nightly-332536bdee05b6fb3b36d33761381826279b48f6-20250113000321 → 5.84.0

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 (322) hide show
  1. package/dist/cjs/ai/chat.js +29 -0
  2. package/dist/cjs/ai/chat.js.map +1 -0
  3. package/dist/cjs/ai/common.js +69 -0
  4. package/dist/cjs/ai/common.js.map +1 -0
  5. package/dist/cjs/ai/execute.js +43 -0
  6. package/dist/cjs/ai/execute.js.map +1 -0
  7. package/dist/cjs/ai/index.js +8 -0
  8. package/dist/cjs/ai/index.js.map +1 -0
  9. package/dist/cjs/auth/is-erc6492-signature.js +2 -2
  10. package/dist/cjs/auth/is-erc6492-signature.js.map +1 -1
  11. package/dist/cjs/auth/parse-erc6492-signature.js +10 -4
  12. package/dist/cjs/auth/parse-erc6492-signature.js.map +1 -1
  13. package/dist/cjs/auth/verify-hash.js +12 -11
  14. package/dist/cjs/auth/verify-hash.js.map +1 -1
  15. package/dist/cjs/auth/verify-signature.js +13 -5
  16. package/dist/cjs/auth/verify-signature.js.map +1 -1
  17. package/dist/cjs/auth/verify-typed-data.js +2 -2
  18. package/dist/cjs/auth/verify-typed-data.js.map +1 -1
  19. package/dist/cjs/contract/deployment/utils/create-2-factory.js +4 -3
  20. package/dist/cjs/contract/deployment/utils/create-2-factory.js.map +1 -1
  21. package/dist/cjs/contract/verification/constructor-params.js +5 -12
  22. package/dist/cjs/contract/verification/constructor-params.js.map +1 -1
  23. package/dist/cjs/exports/ai.js +5 -0
  24. package/dist/cjs/exports/ai.js.map +1 -0
  25. package/dist/cjs/exports/utils.js +9 -6
  26. package/dist/cjs/exports/utils.js.map +1 -1
  27. package/dist/cjs/exports/wallets/engine.js +6 -0
  28. package/dist/cjs/exports/wallets/engine.js.map +1 -0
  29. package/dist/cjs/exports/wallets.js +3 -1
  30. package/dist/cjs/exports/wallets.js.map +1 -1
  31. package/dist/cjs/extensions/ens/resolve-l2-name.js +10 -3
  32. package/dist/cjs/extensions/ens/resolve-l2-name.js.map +1 -1
  33. package/dist/cjs/extensions/erc1155/read/getNFTs.js +2 -2
  34. package/dist/cjs/extensions/erc1155/read/getNFTs.js.map +1 -1
  35. package/dist/cjs/extensions/erc1155/write/mintTo.js +2 -2
  36. package/dist/cjs/extensions/erc1155/write/mintTo.js.map +1 -1
  37. package/dist/cjs/extensions/erc1155/write/mintToBatch.js +2 -2
  38. package/dist/cjs/extensions/erc1155/write/mintToBatch.js.map +1 -1
  39. package/dist/cjs/extensions/erc1155/write/sigMint.js +2 -2
  40. package/dist/cjs/extensions/erc1155/write/sigMint.js.map +1 -1
  41. package/dist/cjs/extensions/modules/ClaimableERC1155/setClaimConditions.js +3 -2
  42. package/dist/cjs/extensions/modules/ClaimableERC1155/setClaimConditions.js.map +1 -1
  43. package/dist/cjs/extensions/modules/MintableERC1155/mintWithRole.js +2 -2
  44. package/dist/cjs/extensions/modules/MintableERC1155/mintWithRole.js.map +1 -1
  45. package/dist/cjs/extensions/modules/MintableERC1155/mintWithSignature.js +2 -2
  46. package/dist/cjs/extensions/modules/MintableERC1155/mintWithSignature.js.map +1 -1
  47. package/dist/cjs/react/core/hooks/wallets/useAutoConnect.js +10 -131
  48. package/dist/cjs/react/core/hooks/wallets/useAutoConnect.js.map +1 -1
  49. package/dist/cjs/react/core/hooks/wallets/useSendToken.js +2 -1
  50. package/dist/cjs/react/core/hooks/wallets/useSendToken.js.map +1 -1
  51. package/dist/cjs/react/native/hooks/wallets/useAutoConnect.js.map +1 -1
  52. package/dist/cjs/react/web/hooks/wallets/useAutoConnect.js +1 -1
  53. package/dist/cjs/react/web/hooks/wallets/useAutoConnect.js.map +1 -1
  54. package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js +3 -1
  55. package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
  56. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +2 -1
  57. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
  58. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js +1 -1
  59. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js.map +1 -1
  60. package/dist/cjs/react/web/ui/ConnectWallet/useConnectModal.js +1 -1
  61. package/dist/cjs/react/web/ui/ConnectWallet/useConnectModal.js.map +1 -1
  62. package/dist/cjs/react/web/wallets/in-app/WalletAuth.js +1 -1
  63. package/dist/cjs/react/web/wallets/in-app/WalletAuth.js.map +1 -1
  64. package/dist/cjs/utils/abi/encodeAbiParameters.js +10 -11
  65. package/dist/cjs/utils/abi/encodeAbiParameters.js.map +1 -1
  66. package/dist/cjs/utils/ens/isValidENSName.js +50 -0
  67. package/dist/cjs/utils/ens/isValidENSName.js.map +1 -0
  68. package/dist/cjs/utils/extensions/drops/convert-quantity.js +2 -2
  69. package/dist/cjs/utils/extensions/drops/convert-quantity.js.map +1 -1
  70. package/dist/cjs/utils/extensions/drops/get-multicall-set-claim-claim-conditon-transactions.js +3 -3
  71. package/dist/cjs/utils/extensions/drops/get-multicall-set-claim-claim-conditon-transactions.js.map +1 -1
  72. package/dist/cjs/utils/timeoutPromise.js.map +1 -0
  73. package/dist/cjs/version.js +1 -1
  74. package/dist/cjs/version.js.map +1 -1
  75. package/dist/cjs/wallets/connection/autoConnect.js +54 -0
  76. package/dist/cjs/wallets/connection/autoConnect.js.map +1 -0
  77. package/dist/cjs/wallets/connection/autoConnectCore.js +135 -0
  78. package/dist/cjs/wallets/connection/autoConnectCore.js.map +1 -0
  79. package/dist/cjs/wallets/connection/types.js.map +1 -0
  80. package/dist/cjs/{react/web/wallets → wallets}/defaultWallets.js +2 -2
  81. package/dist/cjs/wallets/defaultWallets.js.map +1 -0
  82. package/dist/cjs/wallets/engine/index.js +143 -0
  83. package/dist/cjs/wallets/engine/index.js.map +1 -0
  84. package/dist/cjs/wallets/in-app/web/lib/get-url-token.js +1 -1
  85. package/dist/cjs/wallets/in-app/web/lib/get-url-token.js.map +1 -1
  86. package/dist/cjs/wallets/smart/lib/signing.js +1 -1
  87. package/dist/esm/ai/chat.js +26 -0
  88. package/dist/esm/ai/chat.js.map +1 -0
  89. package/dist/esm/ai/common.js +66 -0
  90. package/dist/esm/ai/common.js.map +1 -0
  91. package/dist/esm/ai/execute.js +40 -0
  92. package/dist/esm/ai/execute.js.map +1 -0
  93. package/dist/esm/ai/index.js +3 -0
  94. package/dist/esm/ai/index.js.map +1 -0
  95. package/dist/esm/auth/is-erc6492-signature.js +2 -2
  96. package/dist/esm/auth/is-erc6492-signature.js.map +1 -1
  97. package/dist/esm/auth/parse-erc6492-signature.js +10 -4
  98. package/dist/esm/auth/parse-erc6492-signature.js.map +1 -1
  99. package/dist/esm/auth/verify-hash.js +12 -11
  100. package/dist/esm/auth/verify-hash.js.map +1 -1
  101. package/dist/esm/auth/verify-signature.js +13 -5
  102. package/dist/esm/auth/verify-signature.js.map +1 -1
  103. package/dist/esm/auth/verify-typed-data.js +2 -2
  104. package/dist/esm/auth/verify-typed-data.js.map +1 -1
  105. package/dist/esm/contract/deployment/utils/create-2-factory.js +4 -3
  106. package/dist/esm/contract/deployment/utils/create-2-factory.js.map +1 -1
  107. package/dist/esm/contract/verification/constructor-params.js +5 -12
  108. package/dist/esm/contract/verification/constructor-params.js.map +1 -1
  109. package/dist/esm/exports/ai.js +2 -0
  110. package/dist/esm/exports/ai.js.map +1 -0
  111. package/dist/esm/exports/utils.js +3 -1
  112. package/dist/esm/exports/utils.js.map +1 -1
  113. package/dist/esm/exports/wallets/engine.js +2 -0
  114. package/dist/esm/exports/wallets/engine.js.map +1 -0
  115. package/dist/esm/exports/wallets.js +1 -0
  116. package/dist/esm/exports/wallets.js.map +1 -1
  117. package/dist/esm/extensions/ens/resolve-l2-name.js +11 -4
  118. package/dist/esm/extensions/ens/resolve-l2-name.js.map +1 -1
  119. package/dist/esm/extensions/erc1155/read/getNFTs.js +1 -1
  120. package/dist/esm/extensions/erc1155/read/getNFTs.js.map +1 -1
  121. package/dist/esm/extensions/erc1155/write/mintTo.js +1 -1
  122. package/dist/esm/extensions/erc1155/write/mintTo.js.map +1 -1
  123. package/dist/esm/extensions/erc1155/write/mintToBatch.js +1 -1
  124. package/dist/esm/extensions/erc1155/write/mintToBatch.js.map +1 -1
  125. package/dist/esm/extensions/erc1155/write/sigMint.js +1 -1
  126. package/dist/esm/extensions/erc1155/write/sigMint.js.map +1 -1
  127. package/dist/esm/extensions/modules/ClaimableERC1155/setClaimConditions.js +2 -1
  128. package/dist/esm/extensions/modules/ClaimableERC1155/setClaimConditions.js.map +1 -1
  129. package/dist/esm/extensions/modules/MintableERC1155/mintWithRole.js +1 -1
  130. package/dist/esm/extensions/modules/MintableERC1155/mintWithRole.js.map +1 -1
  131. package/dist/esm/extensions/modules/MintableERC1155/mintWithSignature.js +1 -1
  132. package/dist/esm/extensions/modules/MintableERC1155/mintWithSignature.js.map +1 -1
  133. package/dist/esm/react/core/hooks/wallets/useAutoConnect.js +10 -130
  134. package/dist/esm/react/core/hooks/wallets/useAutoConnect.js.map +1 -1
  135. package/dist/esm/react/core/hooks/wallets/useSendToken.js +2 -1
  136. package/dist/esm/react/core/hooks/wallets/useSendToken.js.map +1 -1
  137. package/dist/esm/react/native/hooks/wallets/useAutoConnect.js.map +1 -1
  138. package/dist/esm/react/web/hooks/wallets/useAutoConnect.js +1 -1
  139. package/dist/esm/react/web/hooks/wallets/useAutoConnect.js.map +1 -1
  140. package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js +3 -1
  141. package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
  142. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +2 -1
  143. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
  144. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js +1 -1
  145. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.js.map +1 -1
  146. package/dist/esm/react/web/ui/ConnectWallet/useConnectModal.js +1 -1
  147. package/dist/esm/react/web/ui/ConnectWallet/useConnectModal.js.map +1 -1
  148. package/dist/esm/react/web/wallets/in-app/WalletAuth.js +1 -1
  149. package/dist/esm/react/web/wallets/in-app/WalletAuth.js.map +1 -1
  150. package/dist/esm/utils/abi/encodeAbiParameters.js +10 -11
  151. package/dist/esm/utils/abi/encodeAbiParameters.js.map +1 -1
  152. package/dist/esm/utils/ens/isValidENSName.js +47 -0
  153. package/dist/esm/utils/ens/isValidENSName.js.map +1 -0
  154. package/dist/esm/utils/extensions/drops/convert-quantity.js +1 -1
  155. package/dist/esm/utils/extensions/drops/convert-quantity.js.map +1 -1
  156. package/dist/esm/utils/extensions/drops/get-multicall-set-claim-claim-conditon-transactions.js +1 -1
  157. package/dist/esm/utils/extensions/drops/get-multicall-set-claim-claim-conditon-transactions.js.map +1 -1
  158. package/dist/esm/utils/timeoutPromise.js.map +1 -0
  159. package/dist/esm/version.js +1 -1
  160. package/dist/esm/version.js.map +1 -1
  161. package/dist/esm/wallets/connection/autoConnect.js +50 -0
  162. package/dist/esm/wallets/connection/autoConnect.js.map +1 -0
  163. package/dist/esm/wallets/connection/autoConnectCore.js +130 -0
  164. package/dist/esm/wallets/connection/autoConnectCore.js.map +1 -0
  165. package/dist/esm/wallets/connection/types.js.map +1 -0
  166. package/dist/esm/{react/web/wallets → wallets}/defaultWallets.js +2 -2
  167. package/dist/esm/wallets/defaultWallets.js.map +1 -0
  168. package/dist/esm/wallets/engine/index.js +140 -0
  169. package/dist/esm/wallets/engine/index.js.map +1 -0
  170. package/dist/esm/wallets/in-app/web/lib/get-url-token.js +1 -1
  171. package/dist/esm/wallets/in-app/web/lib/get-url-token.js.map +1 -1
  172. package/dist/esm/wallets/smart/lib/signing.js +1 -1
  173. package/dist/types/ai/chat.d.ts +24 -0
  174. package/dist/types/ai/chat.d.ts.map +1 -0
  175. package/dist/types/ai/common.d.ts +22 -0
  176. package/dist/types/ai/common.d.ts.map +1 -0
  177. package/dist/types/ai/execute.d.ts +29 -0
  178. package/dist/types/ai/execute.d.ts.map +1 -0
  179. package/dist/types/ai/index.d.ts +4 -0
  180. package/dist/types/ai/index.d.ts.map +1 -0
  181. package/dist/types/auth/parse-erc6492-signature.d.ts.map +1 -1
  182. package/dist/types/auth/verify-hash.d.ts +2 -2
  183. package/dist/types/auth/verify-hash.d.ts.map +1 -1
  184. package/dist/types/auth/verify-signature.d.ts +6 -3
  185. package/dist/types/auth/verify-signature.d.ts.map +1 -1
  186. package/dist/types/auth/verify-typed-data.d.ts +5 -4
  187. package/dist/types/auth/verify-typed-data.d.ts.map +1 -1
  188. package/dist/types/contract/deployment/utils/create-2-factory.d.ts.map +1 -1
  189. package/dist/types/contract/verification/constructor-params.d.ts +2 -2
  190. package/dist/types/contract/verification/constructor-params.d.ts.map +1 -1
  191. package/dist/types/event/types.d.ts +3 -2
  192. package/dist/types/event/types.d.ts.map +1 -1
  193. package/dist/types/exports/ai.d.ts +2 -0
  194. package/dist/types/exports/ai.d.ts.map +1 -0
  195. package/dist/types/exports/react.d.ts +1 -1
  196. package/dist/types/exports/react.d.ts.map +1 -1
  197. package/dist/types/exports/react.native.d.ts +1 -1
  198. package/dist/types/exports/react.native.d.ts.map +1 -1
  199. package/dist/types/exports/utils.d.ts +2 -1
  200. package/dist/types/exports/utils.d.ts.map +1 -1
  201. package/dist/types/exports/wallets/engine.d.ts +2 -0
  202. package/dist/types/exports/wallets/engine.d.ts.map +1 -0
  203. package/dist/types/exports/wallets.d.ts +2 -0
  204. package/dist/types/exports/wallets.d.ts.map +1 -1
  205. package/dist/types/extensions/ens/resolve-l2-name.d.ts.map +1 -1
  206. package/dist/types/extensions/erc1155/write/mintTo.d.ts +1 -1
  207. package/dist/types/extensions/erc1155/write/mintTo.d.ts.map +1 -1
  208. package/dist/types/extensions/erc1155/write/mintToBatch.d.ts +1 -1
  209. package/dist/types/extensions/erc1155/write/mintToBatch.d.ts.map +1 -1
  210. package/dist/types/extensions/modules/ClaimableERC1155/setClaimConditions.d.ts.map +1 -1
  211. package/dist/types/extensions/modules/MintableERC1155/mintWithRole.d.ts +1 -1
  212. package/dist/types/extensions/modules/MintableERC1155/mintWithRole.d.ts.map +1 -1
  213. package/dist/types/extensions/modules/MintableERC1155/mintWithSignature.d.ts +1 -1
  214. package/dist/types/extensions/modules/MintableERC1155/mintWithSignature.d.ts.map +1 -1
  215. package/dist/types/react/core/hooks/wallets/useAutoConnect.d.ts +1 -13
  216. package/dist/types/react/core/hooks/wallets/useAutoConnect.d.ts.map +1 -1
  217. package/dist/types/react/core/hooks/wallets/useSendToken.d.ts.map +1 -1
  218. package/dist/types/react/native/hooks/wallets/useAutoConnect.d.ts +1 -1
  219. package/dist/types/react/native/hooks/wallets/useAutoConnect.d.ts.map +1 -1
  220. package/dist/types/react/native/ui/AutoConnect/AutoConnect.d.ts +1 -1
  221. package/dist/types/react/web/hooks/wallets/useAutoConnect.d.ts +1 -1
  222. package/dist/types/react/web/hooks/wallets/useAutoConnect.d.ts.map +1 -1
  223. package/dist/types/react/web/ui/AutoConnect/AutoConnect.d.ts +1 -1
  224. package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts +2 -0
  225. package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts.map +1 -1
  226. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts +1 -0
  227. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts.map +1 -1
  228. package/dist/types/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.d.ts.map +1 -1
  229. package/dist/types/react/web/ui/ConnectWallet/useConnectModal.d.ts.map +1 -1
  230. package/dist/types/react/web/wallets/in-app/WalletAuth.d.ts.map +1 -1
  231. package/dist/types/utils/ens/isValidENSName.d.ts +14 -0
  232. package/dist/types/utils/ens/isValidENSName.d.ts.map +1 -0
  233. package/dist/types/utils/timeoutPromise.d.ts.map +1 -0
  234. package/dist/types/version.d.ts +1 -1
  235. package/dist/types/version.d.ts.map +1 -1
  236. package/dist/types/wallets/connection/autoConnect.d.ts +27 -0
  237. package/dist/types/wallets/connection/autoConnect.d.ts.map +1 -0
  238. package/dist/types/wallets/connection/autoConnectCore.d.ts +32 -0
  239. package/dist/types/wallets/connection/autoConnectCore.d.ts.map +1 -0
  240. package/dist/types/{react/core/hooks → wallets}/connection/types.d.ts +5 -5
  241. package/dist/types/wallets/connection/types.d.ts.map +1 -0
  242. package/dist/types/wallets/defaultWallets.d.ts +11 -0
  243. package/dist/types/wallets/defaultWallets.d.ts.map +1 -0
  244. package/dist/types/wallets/engine/index.d.ts +54 -0
  245. package/dist/types/wallets/engine/index.d.ts.map +1 -0
  246. package/dist/types/wallets/smart/lib/signing.d.ts +1 -1
  247. package/package.json +9 -1
  248. package/src/ai/chat.test.ts +31 -0
  249. package/src/ai/chat.ts +26 -0
  250. package/src/ai/common.ts +114 -0
  251. package/src/ai/execute.test.ts +43 -0
  252. package/src/ai/execute.ts +44 -0
  253. package/src/ai/index.ts +3 -0
  254. package/src/auth/is-erc6492-signature.ts +2 -2
  255. package/src/auth/parse-erc6492-signature.ts +10 -4
  256. package/src/auth/verify-hash.ts +16 -20
  257. package/src/auth/verify-signature.test.ts +48 -2
  258. package/src/auth/verify-signature.ts +24 -7
  259. package/src/auth/verify-typed-data.ts +9 -7
  260. package/src/contract/deployment/utils/create-2-factory.ts +4 -3
  261. package/src/contract/verification/constructor-params.ts +8 -15
  262. package/src/event/types.ts +6 -5
  263. package/src/exports/ai.ts +1 -0
  264. package/src/exports/react.native.ts +1 -1
  265. package/src/exports/react.ts +1 -1
  266. package/src/exports/utils.ts +4 -1
  267. package/src/exports/wallets/engine.ts +4 -0
  268. package/src/exports/wallets.ts +2 -0
  269. package/src/extensions/ens/resolve-l2-name.ts +21 -5
  270. package/src/extensions/erc1155/read/getNFTs.ts +1 -1
  271. package/src/extensions/erc1155/write/mintTo.ts +1 -1
  272. package/src/extensions/erc1155/write/mintToBatch.ts +1 -1
  273. package/src/extensions/erc1155/write/sigMint.ts +1 -1
  274. package/src/extensions/modules/ClaimableERC1155/setClaimConditions.ts +2 -1
  275. package/src/extensions/modules/MintableERC1155/mintWithRole.ts +1 -1
  276. package/src/extensions/modules/MintableERC1155/mintWithSignature.ts +1 -1
  277. package/src/react/core/hooks/wallets/useAutoConnect.ts +12 -158
  278. package/src/react/core/hooks/wallets/useAutoConnectCore.test.tsx +1 -31
  279. package/src/react/core/hooks/wallets/useSendToken.ts +2 -1
  280. package/src/react/native/hooks/wallets/useAutoConnect.ts +1 -1
  281. package/src/react/native/ui/AutoConnect/AutoConnect.tsx +1 -1
  282. package/src/react/web/hooks/wallets/useAutoConnect.ts +2 -2
  283. package/src/react/web/ui/AutoConnect/AutoConnect.tsx +1 -1
  284. package/src/react/web/ui/ConnectWallet/ConnectButton.tsx +3 -1
  285. package/src/react/web/ui/ConnectWallet/Modal/ConnectEmbed.tsx +2 -1
  286. package/src/react/web/ui/ConnectWallet/screens/WalletSwitcherConnectionScreen.tsx +1 -1
  287. package/src/react/web/ui/ConnectWallet/useConnectModal.tsx +1 -1
  288. package/src/react/web/wallets/in-app/WalletAuth.tsx +1 -1
  289. package/src/utils/abi/encodeAbiParameters.ts +15 -11
  290. package/src/utils/ens/isValidENSName.test.ts +39 -0
  291. package/src/utils/ens/isValidENSName.ts +54 -0
  292. package/src/utils/extensions/drops/convert-quantity.ts +1 -1
  293. package/src/utils/extensions/drops/get-multicall-set-claim-claim-conditon-transactions.ts +1 -1
  294. package/src/version.ts +1 -1
  295. package/src/wallets/connection/autoConnect.test.ts +67 -0
  296. package/src/wallets/connection/autoConnect.ts +58 -0
  297. package/src/wallets/connection/autoConnectCore.test.ts +403 -0
  298. package/src/wallets/connection/autoConnectCore.ts +184 -0
  299. package/src/{react/core/hooks → wallets}/connection/types.ts +5 -5
  300. package/src/{react/web/wallets → wallets}/defaultWallets.ts +5 -10
  301. package/src/wallets/engine/engine-account.test.ts +69 -0
  302. package/src/wallets/engine/index.ts +198 -0
  303. package/src/wallets/in-app/web/lib/get-url-token.ts +1 -1
  304. package/src/wallets/smart/lib/signing.ts +1 -1
  305. package/src/wallets/smart/smart-wallet-integration.test.ts +1 -0
  306. package/dist/cjs/react/core/hooks/connection/types.js.map +0 -1
  307. package/dist/cjs/react/core/utils/timeoutPromise.js.map +0 -1
  308. package/dist/cjs/react/web/wallets/defaultWallets.js.map +0 -1
  309. package/dist/esm/react/core/hooks/connection/types.js.map +0 -1
  310. package/dist/esm/react/core/utils/timeoutPromise.js.map +0 -1
  311. package/dist/esm/react/web/wallets/defaultWallets.js.map +0 -1
  312. package/dist/types/react/core/hooks/connection/types.d.ts.map +0 -1
  313. package/dist/types/react/core/utils/timeoutPromise.d.ts.map +0 -1
  314. package/dist/types/react/web/wallets/defaultWallets.d.ts +0 -11
  315. package/dist/types/react/web/wallets/defaultWallets.d.ts.map +0 -1
  316. /package/dist/cjs/{react/core/utils → utils}/timeoutPromise.js +0 -0
  317. /package/dist/cjs/{react/core/hooks → wallets}/connection/types.js +0 -0
  318. /package/dist/esm/{react/core/utils → utils}/timeoutPromise.js +0 -0
  319. /package/dist/esm/{react/core/hooks → wallets}/connection/types.js +0 -0
  320. /package/dist/types/{react/core/utils → utils}/timeoutPromise.d.ts +0 -0
  321. /package/src/{react/core/utils → utils}/timeoutPromise.test.ts +0 -0
  322. /package/src/{react/core/utils → utils}/timeoutPromise.ts +0 -0
@@ -1,5 +1,10 @@
1
1
  import type { Address } from "abitype";
2
- import { type Hex, encodePacked, keccak256, namehash } from "viem";
2
+ import * as ox__AbiParameters from "ox/AbiParameters";
3
+ import * as ox__Bytes from "ox/Bytes";
4
+ import * as ox__Ens from "ox/Ens";
5
+ import * as ox__Hash from "ox/Hash";
6
+ import * as ox__Hex from "ox/Hex";
7
+ import { keccak256 } from "viem";
3
8
  import type { Chain } from "../../chains/types.js";
4
9
  import type { ThirdwebClient } from "../../client/client.js";
5
10
  import { getContract } from "../../contract/contract.js";
@@ -23,15 +28,26 @@ export type ResolveL2NameOptions = {
23
28
  */
24
29
  const convertReverseNodeToBytes = (address: Address, chainId: number) => {
25
30
  const addressFormatted = address.toLocaleLowerCase() as Address;
26
- const addressNode = keccak256(addressFormatted.substring(2) as Hex);
31
+ // We temporarily need to use the raw hashing function from noble due to a bug in ox
32
+ const addressNode = ox__Hex.fromBytes(
33
+ ox__Hash.keccak256(
34
+ ox__Bytes.fromString(addressFormatted.slice(2) as string),
35
+ ),
36
+ );
27
37
  const cointype = (0x80000000 | chainId) >>> 0;
28
38
 
29
39
  const chainCoinType = cointype.toString(16).toLocaleUpperCase();
30
- const reverseNode = namehash(`${chainCoinType.toLocaleUpperCase()}.reverse`);
40
+ const reverseNode = ox__Ens.namehash(
41
+ `${chainCoinType.toLocaleUpperCase()}.reverse`,
42
+ );
31
43
 
32
- const addressReverseNode = keccak256(
33
- encodePacked(["bytes32", "bytes32"], [reverseNode, addressNode]),
44
+ const addressReverseNode = ox__Hash.keccak256(
45
+ ox__AbiParameters.encodePacked(
46
+ ["bytes32", "bytes32"],
47
+ [reverseNode, addressNode],
48
+ ),
34
49
  );
50
+ keccak256;
35
51
  return addressReverseNode;
36
52
  };
37
53
 
@@ -1,4 +1,4 @@
1
- import { maxUint256 } from "viem";
1
+ import { maxUint256 } from "ox/Solidity";
2
2
  import type { BaseTransactionOptions } from "../../../transaction/types.js";
3
3
  import { min } from "../../../utils/bigint.js";
4
4
  import type { NFT } from "../../../utils/nft/parseNft.js";
@@ -1,4 +1,4 @@
1
- import { maxUint256 } from "viem";
1
+ import { maxUint256 } from "ox/Solidity";
2
2
  import type {
3
3
  BaseTransactionOptions,
4
4
  WithOverrides,
@@ -1,4 +1,4 @@
1
- import { maxUint256 } from "viem";
1
+ import { maxUint256 } from "ox/Solidity";
2
2
  import { multicall } from "../../../extensions/common/__generated__/IMulticall/write/multicall.js";
3
3
  import { upload } from "../../../storage/upload.js";
4
4
  import type {
@@ -1,5 +1,5 @@
1
1
  import type { AbiParameterToPrimitiveType, Address } from "abitype";
2
- import { maxUint256 } from "viem";
2
+ import { maxUint256 } from "ox/Solidity";
3
3
  import {
4
4
  NATIVE_TOKEN_ADDRESS,
5
5
  isNativeTokenAddress,
@@ -1,4 +1,5 @@
1
- import { encodePacked, maxUint256 } from "viem";
1
+ import { maxUint256 } from "ox/Solidity";
2
+ import { encodePacked } from "viem";
2
3
  import { NATIVE_TOKEN_ADDRESS } from "../../../constants/addresses.js";
3
4
  import { upload } from "../../../storage/upload.js";
4
5
  import type { BaseTransactionOptions } from "../../../transaction/types.js";
@@ -1,4 +1,4 @@
1
- import { maxUint256 } from "viem";
1
+ import { maxUint256 } from "ox/Solidity";
2
2
  import type { BaseTransactionOptions } from "../../../transaction/types.js";
3
3
  import { getAddress } from "../../../utils/address.js";
4
4
  import {
@@ -1,4 +1,4 @@
1
- import { maxUint256 } from "viem";
1
+ import { maxUint256 } from "ox/Solidity";
2
2
  import { NATIVE_TOKEN_ADDRESS } from "../../../constants/addresses.js";
3
3
  import type { ThirdwebContract } from "../../../contract/contract.js";
4
4
  import type { BaseTransactionOptions } from "../../../transaction/types.js";
@@ -1,26 +1,14 @@
1
1
  "use client";
2
2
 
3
3
  import { useQuery } from "@tanstack/react-query";
4
- import type { Chain } from "../../../../chains/types.js";
5
- import type { ThirdwebClient } from "../../../../client/client.js";
6
4
  import type { AsyncStorage } from "../../../../utils/storage/AsyncStorage.js";
7
- import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wallet.js";
8
- import { ClientScopedStorage } from "../../../../wallets/in-app/core/authentication/client-scoped-storage.js";
9
- import type { AuthStoredTokenWithCookieReturnType } from "../../../../wallets/in-app/core/authentication/types.js";
10
- import { getUrlToken } from "../../../../wallets/in-app/web/lib/get-url-token.js";
5
+ import { autoConnectCore } from "../../../../wallets/connection/autoConnectCore.js";
6
+ import type { AutoConnectProps } from "../../../../wallets/connection/types.js";
11
7
  import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
12
- import {
13
- getLastConnectedChain,
14
- getStoredActiveWalletId,
15
- getStoredConnectedWalletIds,
16
- } from "../../../../wallets/manager/index.js";
17
8
  import type { WalletId } from "../../../../wallets/wallet-types.js";
18
9
  import { useConnectionManagerCtx } from "../../providers/connection-manager.js";
19
10
  import { setLastAuthProvider } from "../../utils/storage.js";
20
- import { timeoutPromise } from "../../utils/timeoutPromise.js";
21
- import type { AutoConnectProps } from "../connection/types.js";
22
11
  import { useConnect } from "./useConnect.js";
23
- import { useSetActiveWalletConnectionStatus } from "./useSetActiveWalletConnectionStatus.js";
24
12
 
25
13
  export function useAutoConnectCore(
26
14
  storage: AsyncStorage,
@@ -29,161 +17,27 @@ export function useAutoConnectCore(
29
17
  getInstalledWallets?: () => Wallet[],
30
18
  ) {
31
19
  const manager = useConnectionManagerCtx("useAutoConnect");
32
- const setConnectionStatus = useSetActiveWalletConnectionStatus();
33
20
  const { connect } = useConnect({
34
21
  client: props.client,
35
22
  accountAbstraction: props.accountAbstraction,
36
23
  });
37
- const { isAutoConnecting } = manager;
38
- const { wallets, onConnect } = props;
39
- const timeout = props.timeout ?? 15000;
40
- // get the supported wallets from thirdweb provider
41
- // check the storage for last connected wallets and connect them all
42
- // check the storage for last active wallet and set it as active
43
- const autoConnect = async (): Promise<boolean> => {
44
- let autoConnected = false;
45
- isAutoConnecting.setValue(true);
46
- let [lastConnectedWalletIds, lastActiveWalletId] = await Promise.all([
47
- getStoredConnectedWalletIds(storage),
48
- getStoredActiveWalletId(storage),
49
- ]);
50
-
51
- const { authResult, walletId, authProvider, authCookie } = getUrlToken();
52
- const wallet = wallets.find((w) => w.id === walletId);
53
-
54
- // If an auth cookie is found and this site supports the wallet, we'll set the auth cookie in the client storage
55
- if (authCookie && wallet) {
56
- const clientStorage = new ClientScopedStorage({
57
- storage,
58
- clientId: props.client.clientId,
59
- ecosystem: isEcosystemWallet(wallet)
60
- ? {
61
- id: wallet.id,
62
- partnerId: wallet.getConfig()?.partnerId,
63
- }
64
- : undefined,
65
- });
66
- await clientStorage.saveAuthCookie(authCookie);
67
- }
68
-
69
- if (walletId) {
70
- lastActiveWalletId = walletId;
71
- lastConnectedWalletIds = lastConnectedWalletIds?.includes(walletId)
72
- ? lastConnectedWalletIds
73
- : [walletId, ...(lastConnectedWalletIds || [])];
74
- }
75
- if (authProvider) {
76
- await setLastAuthProvider(authProvider, storage);
77
- }
78
-
79
- // if no wallets were last connected or we didn't receive an auth token
80
- if (!lastConnectedWalletIds) {
81
- return autoConnected;
82
- }
83
-
84
- // this flow can actually be used for a first connection in the case of a redirect
85
- // in that case, we default to the passed chain to connect to
86
- const lastConnectedChain =
87
- (await getLastConnectedChain(storage)) || props.chain;
88
-
89
- const availableWallets = [...wallets, ...(getInstalledWallets?.() ?? [])];
90
- const activeWallet =
91
- lastActiveWalletId &&
92
- (availableWallets.find((w) => w.id === lastActiveWalletId) ||
93
- createWalletFn(lastActiveWalletId));
94
-
95
- if (activeWallet) {
96
- try {
97
- setConnectionStatus("connecting"); // only set connecting status if we are connecting the last active EOA
98
- await timeoutPromise(
99
- handleWalletConnection({
100
- wallet: activeWallet,
101
- client: props.client,
102
- lastConnectedChain,
103
- authResult,
104
- }),
105
- {
106
- ms: timeout,
107
- message: `AutoConnect timeout: ${timeout}ms limit exceeded.`,
108
- },
109
- ).catch((err) => {
110
- console.warn(err.message);
111
- if (props.onTimeout) {
112
- props.onTimeout();
113
- }
114
- });
115
-
116
- // connected wallet could be activeWallet or smart wallet
117
- const connectedWallet = await connect(activeWallet);
118
-
119
- if (connectedWallet) {
120
- if (onConnect) {
121
- try {
122
- onConnect(connectedWallet);
123
- autoConnected = true;
124
- } catch {
125
- // ignore
126
- }
127
- }
128
- } else {
129
- setConnectionStatus("disconnected");
130
- }
131
- } catch (e) {
132
- if (e instanceof Error) {
133
- console.warn("Error auto connecting wallet:", e.message);
134
- }
135
- setConnectionStatus("disconnected");
136
- }
137
- } else {
138
- setConnectionStatus("disconnected");
139
- }
140
-
141
- // then connect wallets that were last connected but were not set as active
142
- const otherWallets = availableWallets.filter(
143
- (w) =>
144
- w.id !== lastActiveWalletId && lastConnectedWalletIds.includes(w.id),
145
- );
146
-
147
- for (const wallet of otherWallets) {
148
- try {
149
- await handleWalletConnection({
150
- wallet,
151
- client: props.client,
152
- lastConnectedChain,
153
- authResult,
154
- });
155
- manager.addConnectedWallet(wallet);
156
- } catch {
157
- // no-op
158
- }
159
- }
160
- isAutoConnecting.setValue(false);
161
- return autoConnected; // useQuery needs a return value
162
- };
163
24
 
164
25
  // trigger the auto connect on first mount only
165
26
  const query = useQuery({
166
27
  queryKey: ["autoConnect", props.client.clientId],
167
- queryFn: autoConnect,
28
+ queryFn: () =>
29
+ autoConnectCore({
30
+ createWalletFn,
31
+ manager,
32
+ props,
33
+ storage,
34
+ connectOverride: connect,
35
+ getInstalledWallets,
36
+ setLastAuthProvider,
37
+ }),
168
38
  refetchOnMount: false,
169
39
  refetchOnWindowFocus: false,
170
40
  });
171
41
 
172
42
  return query;
173
43
  }
174
-
175
- /**
176
- * @internal
177
- */
178
- export async function handleWalletConnection(props: {
179
- wallet: Wallet;
180
- client: ThirdwebClient;
181
- authResult: AuthStoredTokenWithCookieReturnType | undefined;
182
- lastConnectedChain: Chain | undefined;
183
- }) {
184
- return props.wallet.autoConnect({
185
- client: props.client,
186
- chain: props.lastConnectedChain,
187
- authResult: props.authResult,
188
- });
189
- }
@@ -6,15 +6,11 @@ import { TEST_CLIENT } from "~test/test-clients.js";
6
6
  import { TEST_ACCOUNT_A } from "~test/test-wallets.js";
7
7
  import { createWalletAdapter } from "../../../../adapters/wallet-adapter.js";
8
8
  import { ethereum } from "../../../../chains/chain-definitions/ethereum.js";
9
- import { isAddress } from "../../../../utils/address.js";
10
9
  import { createConnectionManager } from "../../../../wallets/manager/index.js";
11
10
  import type { WalletId } from "../../../../wallets/wallet-types.js";
12
11
  import { ThirdwebProvider } from "../../../web/providers/thirdweb-provider.js";
13
12
  import { ConnectionManagerCtx } from "../../providers/connection-manager.js";
14
- import {
15
- handleWalletConnection,
16
- useAutoConnectCore,
17
- } from "./useAutoConnect.js";
13
+ import { useAutoConnectCore } from "./useAutoConnect.js";
18
14
 
19
15
  describe("useAutoConnectCore", () => {
20
16
  const mockStorage = new MockStorage();
@@ -159,29 +155,3 @@ describe("useAutoConnectCore", () => {
159
155
  );
160
156
  });
161
157
  });
162
-
163
- describe("handleWalletConnection", () => {
164
- const wallet = createWalletAdapter({
165
- adaptedAccount: TEST_ACCOUNT_A,
166
- client: TEST_CLIENT,
167
- chain: ethereum,
168
- onDisconnect: () => {},
169
- switchChain: () => {},
170
- });
171
- it("should return the correct result", async () => {
172
- const result = await handleWalletConnection({
173
- client: TEST_CLIENT,
174
- lastConnectedChain: ethereum,
175
- authResult: undefined,
176
- wallet,
177
- });
178
-
179
- expect("address" in result).toBe(true);
180
- expect(isAddress(result.address)).toBe(true);
181
- expect("sendTransaction" in result).toBe(true);
182
- expect(typeof result.sendTransaction).toBe("function");
183
- expect("signMessage" in result).toBe(true);
184
- expect("signTypedData" in result).toBe(true);
185
- expect("signTransaction" in result).toBe(true);
186
- });
187
- });
@@ -6,6 +6,7 @@ import { transfer } from "../../../../extensions/erc20/write/transfer.js";
6
6
  import { sendTransaction } from "../../../../transaction/actions/send-transaction.js";
7
7
  import { prepareTransaction } from "../../../../transaction/prepare-transaction.js";
8
8
  import { isAddress } from "../../../../utils/address.js";
9
+ import { isValidENSName } from "../../../../utils/ens/isValidENSName.js";
9
10
  import { toWei } from "../../../../utils/units.js";
10
11
  import { useActiveWallet } from "./useActiveWallet.js";
11
12
 
@@ -53,7 +54,7 @@ export function useSendToken(client: ThirdwebClient) {
53
54
  // input validation
54
55
  if (
55
56
  !receiverAddress ||
56
- (!receiverAddress.endsWith(".eth") && !isAddress(receiverAddress))
57
+ (!isValidENSName(receiverAddress) && !isAddress(receiverAddress))
57
58
  ) {
58
59
  throw new Error("Invalid receiver address");
59
60
  }
@@ -1,6 +1,6 @@
1
1
  import { nativeLocalStorage } from "../../../../utils/storage/nativeStorage.js";
2
+ import type { AutoConnectProps } from "../../../../wallets/connection/types.js";
2
3
  import { createWallet } from "../../../../wallets/native/create-wallet.js";
3
- import type { AutoConnectProps } from "../../../core/hooks/connection/types.js";
4
4
  import { useAutoConnectCore } from "../../../core/hooks/wallets/useAutoConnect.js";
5
5
  import { getDefaultWallets } from "../../wallets/defaultWallets.js";
6
6
 
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import type { AutoConnectProps } from "../../../core/hooks/connection/types.js";
2
+ import type { AutoConnectProps } from "../../../../wallets/connection/types.js";
3
3
  import { useAutoConnect } from "../../hooks/wallets/useAutoConnect.js";
4
4
 
5
5
  /**
@@ -1,9 +1,9 @@
1
1
  import { webLocalStorage } from "../../../../utils/storage/webStorage.js";
2
+ import type { AutoConnectProps } from "../../../../wallets/connection/types.js";
2
3
  import { createWallet } from "../../../../wallets/create-wallet.js";
4
+ import { getDefaultWallets } from "../../../../wallets/defaultWallets.js";
3
5
  import { getInstalledWalletProviders } from "../../../../wallets/injected/mipdStore.js";
4
- import type { AutoConnectProps } from "../../../core/hooks/connection/types.js";
5
6
  import { useAutoConnectCore } from "../../../core/hooks/wallets/useAutoConnect.js";
6
- import { getDefaultWallets } from "../../wallets/defaultWallets.js";
7
7
 
8
8
  /**
9
9
  * Autoconnect the last previously connected wallet.
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import type { AutoConnectProps } from "../../../core/hooks/connection/types.js";
2
+ import type { AutoConnectProps } from "../../../../wallets/connection/types.js";
3
3
  import { useAutoConnect } from "../../hooks/wallets/useAutoConnect.js";
4
4
 
5
5
  /**
@@ -2,6 +2,7 @@
2
2
 
3
3
  import styled from "@emotion/styled";
4
4
  import { useEffect, useMemo, useState } from "react";
5
+ import { getDefaultWallets } from "../../../../wallets/defaultWallets.js";
5
6
  import { iconSize } from "../../../core/design-system/index.js";
6
7
  import { useSiweAuth } from "../../../core/hooks/auth/useSiweAuth.js";
7
8
  import type { ConnectButtonProps } from "../../../core/hooks/connection/ConnectButtonProps.js";
@@ -16,7 +17,6 @@ import {
16
17
  } from "../../providers/wallet-ui-states-provider.js";
17
18
  import { canFitWideModal } from "../../utils/canFitWideModal.js";
18
19
  import { usePreloadWalletProviders } from "../../utils/usePreloadWalletProviders.js";
19
- import { getDefaultWallets } from "../../wallets/defaultWallets.js";
20
20
  import { AutoConnect } from "../AutoConnect/AutoConnect.js";
21
21
  import { Modal } from "../components/Modal.js";
22
22
  import { Spinner } from "../components/Spinner.js";
@@ -111,6 +111,8 @@ const TW_CONNECT_WALLET = "tw-connect-wallet";
111
111
  * />;
112
112
  * ```
113
113
  *
114
+ * Note that this prop doesn't affect ecosystem wallets. Ecosystem wallets will only be converted to smart accounts if the ecosystem owner has enabled account abstraction.
115
+ *
114
116
  * ### Enabling sign in with ethereum (Auth)
115
117
  *
116
118
  * ```tsx
@@ -2,6 +2,7 @@
2
2
  import { useEffect, useMemo } from "react";
3
3
  import type { Chain } from "../../../../../chains/types.js";
4
4
  import type { ThirdwebClient } from "../../../../../client/client.js";
5
+ import { getDefaultWallets } from "../../../../../wallets/defaultWallets.js";
5
6
  import type { Wallet } from "../../../../../wallets/interfaces/wallet.js";
6
7
  import type { SmartWalletOptions } from "../../../../../wallets/smart/types.js";
7
8
  import {
@@ -21,7 +22,6 @@ import { useConnectionManager } from "../../../../core/providers/connection-mana
21
22
  import { WalletUIStatesProvider } from "../../../providers/wallet-ui-states-provider.js";
22
23
  import { canFitWideModal } from "../../../utils/canFitWideModal.js";
23
24
  import { usePreloadWalletProviders } from "../../../utils/usePreloadWalletProviders.js";
24
- import { getDefaultWallets } from "../../../wallets/defaultWallets.js";
25
25
  import { LoadingScreen } from "../../../wallets/shared/LoadingScreen.js";
26
26
  import { AutoConnect } from "../../AutoConnect/AutoConnect.js";
27
27
  import { DynamicHeight } from "../../components/DynamicHeight.js";
@@ -110,6 +110,7 @@ import { useSetupScreen } from "./screen.js";
110
110
  * }}
111
111
  * />;
112
112
  * ```
113
+ * Note that this prop doesn't affect ecosystem wallets. Ecosystem wallets will only be converted to smart accounts if the ecosystem owner has enabled account abstraction.
113
114
  *
114
115
  * ### Enabling sign in with ethereum (Auth)
115
116
  *
@@ -1,11 +1,11 @@
1
1
  import type { Chain } from "../../../../../chains/types.js";
2
2
  import type { ThirdwebClient } from "../../../../../client/client.js";
3
+ import { getDefaultWallets } from "../../../../../wallets/defaultWallets.js";
3
4
  import type { Wallet } from "../../../../../wallets/interfaces/wallet.js";
4
5
  import type { SmartWalletOptions } from "../../../../../wallets/smart/types.js";
5
6
  import type { AppMetadata } from "../../../../../wallets/types.js";
6
7
  import type { WalletId } from "../../../../../wallets/wallet-types.js";
7
8
  import { useConnectedWallets } from "../../../../core/hooks/wallets/useConnectedWallets.js";
8
- import { getDefaultWallets } from "../../../wallets/defaultWallets.js";
9
9
  import { ConnectModalContent } from "../Modal/ConnectModalContent.js";
10
10
  import { useSetupScreen } from "../Modal/screen.js";
11
11
  import type { ConnectLocale } from "../locale/types.js";
@@ -1,6 +1,7 @@
1
1
  import { useCallback, useContext, useMemo, useState } from "react";
2
2
  import type { Chain } from "../../../../chains/types.js";
3
3
  import type { ThirdwebClient } from "../../../../client/client.js";
4
+ import { getDefaultWallets } from "../../../../wallets/defaultWallets.js";
4
5
  import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
5
6
  import type { SmartWalletOptions } from "../../../../wallets/smart/types.js";
6
7
  import type { AppMetadata } from "../../../../wallets/types.js";
@@ -8,7 +9,6 @@ import type { Theme } from "../../../core/design-system/index.js";
8
9
  import { SetRootElementContext } from "../../../core/providers/RootElementContext.js";
9
10
  import { WalletUIStatesProvider } from "../../providers/wallet-ui-states-provider.js";
10
11
  import { canFitWideModal } from "../../utils/canFitWideModal.js";
11
- import { getDefaultWallets } from "../../wallets/defaultWallets.js";
12
12
  import type { LocaleId } from "../types.js";
13
13
  import ConnectModal from "./Modal/ConnectModal.js";
14
14
  import { getConnectLocale } from "./locale/getConnectLocale.js";
@@ -1,6 +1,7 @@
1
1
  import { Suspense, useRef, useState } from "react";
2
2
  import { defineChain } from "../../../../chains/utils.js";
3
3
  import type { ThirdwebClient } from "../../../../client/client.js";
4
+ import { getDefaultWallets } from "../../../../wallets/defaultWallets.js";
4
5
  import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wallet.js";
5
6
  import { linkProfile } from "../../../../wallets/in-app/web/lib/auth/index.js";
6
7
  import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
@@ -13,7 +14,6 @@ import type { ConnectLocale } from "../../ui/ConnectWallet/locale/types.js";
13
14
  import { Spacer } from "../../ui/components/Spacer.js";
14
15
  import { WalletImage } from "../../ui/components/WalletImage.js";
15
16
  import { Container, ModalHeader } from "../../ui/components/basic.js";
16
- import { getDefaultWallets } from "../defaultWallets.js";
17
17
  import { ErrorState } from "../shared/ErrorState.js";
18
18
  import { LoadingScreen } from "../shared/LoadingScreen.js";
19
19
  import { LoadingState } from "../shared/LoadingState.js";
@@ -3,7 +3,7 @@ import type {
3
3
  AbiParameterToPrimitiveType,
4
4
  AbiParametersToPrimitiveTypes,
5
5
  } from "abitype";
6
- import { concat, slice } from "viem/utils";
6
+ import * as ox__Hex from "ox/Hex";
7
7
  import { isAddress } from "../address.js";
8
8
  import { byteSize } from "../encoding/helpers/byte-size.js";
9
9
  import {
@@ -149,7 +149,7 @@ function encodeParams(preparedParams: PreparedParam[]): Hex {
149
149
  }
150
150
 
151
151
  // 3. Concatenate static and dynamic parts.
152
- return concat([...staticParams, ...dynamicParams]);
152
+ return ox__Hex.concat(...[...staticParams, ...dynamicParams]);
153
153
  }
154
154
 
155
155
  /////////////////////////////////////////////////////////////////
@@ -200,7 +200,10 @@ function encodeArray<const TParam extends AbiParameter>(
200
200
  const length_ = numberToHex(preparedParams.length, { size: 32 });
201
201
  return {
202
202
  dynamic: true,
203
- encoded: preparedParams.length > 0 ? concat([length_, data]) : length_,
203
+ encoded:
204
+ preparedParams.length > 0
205
+ ? ox__Hex.concat(...[length_, data])
206
+ : length_,
204
207
  };
205
208
  }
206
209
  if (dynamicChild) {
@@ -209,7 +212,7 @@ function encodeArray<const TParam extends AbiParameter>(
209
212
  }
210
213
  return {
211
214
  dynamic: false,
212
- encoded: concat(preparedParams.map(({ encoded }) => encoded)),
215
+ encoded: ox__Hex.concat(...preparedParams.map(({ encoded }) => encoded)),
213
216
  };
214
217
  }
215
218
 
@@ -231,7 +234,9 @@ function encodeBytes<const TParam extends AbiParameter>(
231
234
  }
232
235
  return {
233
236
  dynamic: true,
234
- encoded: concat([padHex(numberToHex(bytesSize, { size: 32 })), value_]),
237
+ encoded: ox__Hex.concat(
238
+ ...[padHex(numberToHex(bytesSize, { size: 32 })), value_],
239
+ ),
235
240
  };
236
241
  }
237
242
  if (bytesSize !== Number.parseInt(paramSize)) {
@@ -263,17 +268,16 @@ function encodeString(value: string): PreparedParam {
263
268
  const parts: Hex[] = [];
264
269
  for (let i = 0; i < partsLength; i++) {
265
270
  parts.push(
266
- padHex(slice(hexValue, i * 32, (i + 1) * 32), {
271
+ padHex(ox__Hex.slice(hexValue, i * 32, (i + 1) * 32), {
267
272
  dir: "right",
268
273
  }),
269
274
  );
270
275
  }
271
276
  return {
272
277
  dynamic: true,
273
- encoded: concat([
274
- padHex(numberToHex(byteSize(hexValue), { size: 32 })),
275
- ...parts,
276
- ]),
278
+ encoded: ox__Hex.concat(
279
+ ...[padHex(numberToHex(byteSize(hexValue), { size: 32 })), ...parts],
280
+ ),
277
281
  };
278
282
  }
279
283
 
@@ -304,7 +308,7 @@ function encodeTuple<
304
308
  dynamic,
305
309
  encoded: dynamic
306
310
  ? encodeParams(preparedParams)
307
- : concat(preparedParams.map(({ encoded }) => encoded)),
311
+ : ox__Hex.concat(...preparedParams.map(({ encoded }) => encoded)),
308
312
  };
309
313
  }
310
314
 
@@ -0,0 +1,39 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { isValidENSName } from "./isValidENSName.js";
3
+
4
+ describe("isValidENSName", () => {
5
+ it("should return true for a valid ENS name", () => {
6
+ expect(isValidENSName("thirdweb.eth")).toBe(true);
7
+ expect(isValidENSName("deployer.thirdweb.eth")).toBe(true);
8
+ expect(isValidENSName("x.eth")).toBe(true);
9
+ expect(isValidENSName("foo.bar.com")).toBe(true);
10
+ expect(isValidENSName("foo.com")).toBe(true);
11
+ expect(isValidENSName("somename.xyz")).toBe(true);
12
+ expect(isValidENSName("_foo.bar")).toBe(true);
13
+ expect(isValidENSName("-foo.bar.com")).toBe(true);
14
+ });
15
+
16
+ it("should return false for an invalid ENS name", () => {
17
+ // No TLD
18
+ expect(isValidENSName("")).toBe(false);
19
+ expect(isValidENSName("foo")).toBe(false);
20
+
21
+ // parts with length < 2
22
+ expect(isValidENSName(".eth")).toBe(false);
23
+ expect(isValidENSName("foo..com")).toBe(false);
24
+ expect(isValidENSName("thirdweb.eth.")).toBe(false);
25
+
26
+ // numeric TLD
27
+ expect(isValidENSName("foo.123")).toBe(false);
28
+
29
+ // whitespace in parts
30
+ expect(isValidENSName("foo .com")).toBe(false);
31
+ expect(isValidENSName("foo. com")).toBe(false);
32
+
33
+ // full-width characters
34
+ expect(isValidENSName("foo.bar.com")).toBe(false);
35
+
36
+ // wildcard characters
37
+ expect(isValidENSName("foo*bar.com")).toBe(false);
38
+ });
39
+ });