thirdweb 5.56.0 → 5.57.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 (280) hide show
  1. package/dist/cjs/contract/verification/index.js +29 -33
  2. package/dist/cjs/contract/verification/index.js.map +1 -1
  3. package/dist/cjs/extensions/erc1155/read/getNFTs.js +4 -1
  4. package/dist/cjs/extensions/erc1155/read/getNFTs.js.map +1 -1
  5. package/dist/cjs/react/core/utils/walletIcon.js +4 -1
  6. package/dist/cjs/react/core/utils/walletIcon.js.map +1 -1
  7. package/dist/cjs/react/native/ui/components/WalletImage.js +2 -0
  8. package/dist/cjs/react/native/ui/components/WalletImage.js.map +1 -1
  9. package/dist/cjs/react/native/ui/connect/InAppWalletUI.js +21 -1
  10. package/dist/cjs/react/native/ui/connect/InAppWalletUI.js.map +1 -1
  11. package/dist/cjs/react/native/ui/connect/TokenListScreen.js +2 -1
  12. package/dist/cjs/react/native/ui/connect/TokenListScreen.js.map +1 -1
  13. package/dist/cjs/react/native/ui/icons/svgs.js +2 -1
  14. package/dist/cjs/react/native/ui/icons/svgs.js.map +1 -1
  15. package/dist/cjs/react/web/ui/ConnectWallet/Details.js +15 -2
  16. package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
  17. package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js +12 -12
  18. package/dist/cjs/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
  19. package/dist/cjs/react/web/ui/ConnectWallet/screens/TokenSelector.js +5 -5
  20. package/dist/cjs/react/web/ui/ConnectWallet/screens/TokenSelector.js.map +1 -1
  21. package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js +1 -1
  22. package/dist/cjs/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
  23. package/dist/cjs/react/web/wallets/ecosystem/EcosystemWalletHeader.js +3 -3
  24. package/dist/cjs/react/web/wallets/ecosystem/EcosystemWalletHeader.js.map +1 -1
  25. package/dist/cjs/react/web/wallets/in-app/InAppWalletConnectUI.js +4 -0
  26. package/dist/cjs/react/web/wallets/in-app/InAppWalletConnectUI.js.map +1 -1
  27. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js +38 -19
  28. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  29. package/dist/cjs/react/web/wallets/shared/GuestLogin.js +81 -0
  30. package/dist/cjs/react/web/wallets/shared/GuestLogin.js.map +1 -0
  31. package/dist/cjs/react/web/wallets/shared/OTPLoginUI.js +1 -1
  32. package/dist/cjs/react/web/wallets/shared/OTPLoginUI.js.map +1 -1
  33. package/dist/cjs/react/web/wallets/shared/SocialLogin.js +1 -1
  34. package/dist/cjs/react/web/wallets/shared/SocialLogin.js.map +1 -1
  35. package/dist/cjs/react/web/wallets/shared/locale/de.js +2 -1
  36. package/dist/cjs/react/web/wallets/shared/locale/de.js.map +1 -1
  37. package/dist/cjs/react/web/wallets/shared/locale/en.js +1 -0
  38. package/dist/cjs/react/web/wallets/shared/locale/en.js.map +1 -1
  39. package/dist/cjs/react/web/wallets/shared/locale/es.js +2 -1
  40. package/dist/cjs/react/web/wallets/shared/locale/es.js.map +1 -1
  41. package/dist/cjs/react/web/wallets/shared/locale/fr.js +2 -1
  42. package/dist/cjs/react/web/wallets/shared/locale/fr.js.map +1 -1
  43. package/dist/cjs/react/web/wallets/shared/locale/ja.js +2 -1
  44. package/dist/cjs/react/web/wallets/shared/locale/ja.js.map +1 -1
  45. package/dist/cjs/react/web/wallets/shared/locale/kr.js +2 -1
  46. package/dist/cjs/react/web/wallets/shared/locale/kr.js.map +1 -1
  47. package/dist/cjs/react/web/wallets/shared/locale/tl.js +2 -1
  48. package/dist/cjs/react/web/wallets/shared/locale/tl.js.map +1 -1
  49. package/dist/cjs/react/web/wallets/shared/locale/vi.js +1 -0
  50. package/dist/cjs/react/web/wallets/shared/locale/vi.js.map +1 -1
  51. package/dist/cjs/react/web/wallets/shared/oauthSignIn.js +1 -0
  52. package/dist/cjs/react/web/wallets/shared/oauthSignIn.js.map +1 -1
  53. package/dist/cjs/utils/any-evm/deploy-metadata.js +1 -0
  54. package/dist/cjs/utils/any-evm/deploy-metadata.js.map +1 -1
  55. package/dist/cjs/utils/encoding/hex.js +1 -3
  56. package/dist/cjs/utils/encoding/hex.js.map +1 -1
  57. package/dist/cjs/utils/fetch.js +7 -12
  58. package/dist/cjs/utils/fetch.js.map +1 -1
  59. package/dist/cjs/utils/promise/p-limit.js.map +1 -1
  60. package/dist/cjs/utils/signatures/sign-message.js +2 -4
  61. package/dist/cjs/utils/signatures/sign-message.js.map +1 -1
  62. package/dist/cjs/version.js +1 -1
  63. package/dist/cjs/wallets/in-app/core/authentication/guest.js +33 -0
  64. package/dist/cjs/wallets/in-app/core/authentication/guest.js.map +1 -0
  65. package/dist/cjs/wallets/in-app/core/authentication/types.js +1 -0
  66. package/dist/cjs/wallets/in-app/core/authentication/types.js.map +1 -1
  67. package/dist/cjs/wallets/in-app/native/auth/native-auth.js +25 -0
  68. package/dist/cjs/wallets/in-app/native/auth/native-auth.js.map +1 -1
  69. package/dist/cjs/wallets/in-app/native/helpers/api/fetchers.js +1 -3
  70. package/dist/cjs/wallets/in-app/native/helpers/api/fetchers.js.map +1 -1
  71. package/dist/cjs/wallets/in-app/native/helpers/wallet/sss.js.map +1 -1
  72. package/dist/cjs/wallets/in-app/native/native-connector.js +32 -0
  73. package/dist/cjs/wallets/in-app/native/native-connector.js.map +1 -1
  74. package/dist/cjs/wallets/in-app/web/in-app.js +13 -1
  75. package/dist/cjs/wallets/in-app/web/in-app.js.map +1 -1
  76. package/dist/cjs/wallets/in-app/web/lib/web-connector.js +8 -0
  77. package/dist/cjs/wallets/in-app/web/lib/web-connector.js.map +1 -1
  78. package/dist/cjs/wallets/manager/index.js +5 -0
  79. package/dist/cjs/wallets/manager/index.js.map +1 -1
  80. package/dist/cjs/wallets/types.js +1 -0
  81. package/dist/cjs/wallets/types.js.map +1 -1
  82. package/dist/cjs/wallets/wallet-connect/receiver/request-handlers/switch-chain.js +2 -4
  83. package/dist/cjs/wallets/wallet-connect/receiver/request-handlers/switch-chain.js.map +1 -1
  84. package/dist/esm/contract/verification/index.js +29 -33
  85. package/dist/esm/contract/verification/index.js.map +1 -1
  86. package/dist/esm/extensions/erc1155/read/getNFTs.js +4 -1
  87. package/dist/esm/extensions/erc1155/read/getNFTs.js.map +1 -1
  88. package/dist/esm/react/core/utils/walletIcon.js +3 -0
  89. package/dist/esm/react/core/utils/walletIcon.js.map +1 -1
  90. package/dist/esm/react/native/ui/components/WalletImage.js +3 -1
  91. package/dist/esm/react/native/ui/components/WalletImage.js.map +1 -1
  92. package/dist/esm/react/native/ui/connect/InAppWalletUI.js +21 -1
  93. package/dist/esm/react/native/ui/connect/InAppWalletUI.js.map +1 -1
  94. package/dist/esm/react/native/ui/connect/TokenListScreen.js +2 -1
  95. package/dist/esm/react/native/ui/connect/TokenListScreen.js.map +1 -1
  96. package/dist/esm/react/native/ui/icons/svgs.js +1 -0
  97. package/dist/esm/react/native/ui/icons/svgs.js.map +1 -1
  98. package/dist/esm/react/web/ui/ConnectWallet/Details.js +15 -2
  99. package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
  100. package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js +12 -12
  101. package/dist/esm/react/web/ui/ConnectWallet/screens/SignatureScreen.js.map +1 -1
  102. package/dist/esm/react/web/ui/ConnectWallet/screens/TokenSelector.js +6 -6
  103. package/dist/esm/react/web/ui/ConnectWallet/screens/TokenSelector.js.map +1 -1
  104. package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js +1 -1
  105. package/dist/esm/react/web/ui/MediaRenderer/MediaRenderer.js.map +1 -1
  106. package/dist/esm/react/web/wallets/ecosystem/EcosystemWalletHeader.js +3 -3
  107. package/dist/esm/react/web/wallets/ecosystem/EcosystemWalletHeader.js.map +1 -1
  108. package/dist/esm/react/web/wallets/in-app/InAppWalletConnectUI.js +4 -0
  109. package/dist/esm/react/web/wallets/in-app/InAppWalletConnectUI.js.map +1 -1
  110. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js +38 -19
  111. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  112. package/dist/esm/react/web/wallets/shared/GuestLogin.js +78 -0
  113. package/dist/esm/react/web/wallets/shared/GuestLogin.js.map +1 -0
  114. package/dist/esm/react/web/wallets/shared/OTPLoginUI.js +1 -1
  115. package/dist/esm/react/web/wallets/shared/OTPLoginUI.js.map +1 -1
  116. package/dist/esm/react/web/wallets/shared/SocialLogin.js +1 -1
  117. package/dist/esm/react/web/wallets/shared/SocialLogin.js.map +1 -1
  118. package/dist/esm/react/web/wallets/shared/locale/de.js +2 -1
  119. package/dist/esm/react/web/wallets/shared/locale/de.js.map +1 -1
  120. package/dist/esm/react/web/wallets/shared/locale/en.js +1 -0
  121. package/dist/esm/react/web/wallets/shared/locale/en.js.map +1 -1
  122. package/dist/esm/react/web/wallets/shared/locale/es.js +2 -1
  123. package/dist/esm/react/web/wallets/shared/locale/es.js.map +1 -1
  124. package/dist/esm/react/web/wallets/shared/locale/fr.js +2 -1
  125. package/dist/esm/react/web/wallets/shared/locale/fr.js.map +1 -1
  126. package/dist/esm/react/web/wallets/shared/locale/ja.js +2 -1
  127. package/dist/esm/react/web/wallets/shared/locale/ja.js.map +1 -1
  128. package/dist/esm/react/web/wallets/shared/locale/kr.js +2 -1
  129. package/dist/esm/react/web/wallets/shared/locale/kr.js.map +1 -1
  130. package/dist/esm/react/web/wallets/shared/locale/tl.js +2 -1
  131. package/dist/esm/react/web/wallets/shared/locale/tl.js.map +1 -1
  132. package/dist/esm/react/web/wallets/shared/locale/vi.js +1 -0
  133. package/dist/esm/react/web/wallets/shared/locale/vi.js.map +1 -1
  134. package/dist/esm/react/web/wallets/shared/oauthSignIn.js +1 -0
  135. package/dist/esm/react/web/wallets/shared/oauthSignIn.js.map +1 -1
  136. package/dist/esm/utils/any-evm/deploy-metadata.js +1 -0
  137. package/dist/esm/utils/any-evm/deploy-metadata.js.map +1 -1
  138. package/dist/esm/utils/encoding/hex.js +1 -3
  139. package/dist/esm/utils/encoding/hex.js.map +1 -1
  140. package/dist/esm/utils/fetch.js +1 -7
  141. package/dist/esm/utils/fetch.js.map +1 -1
  142. package/dist/esm/utils/promise/p-limit.js.map +1 -1
  143. package/dist/esm/utils/signatures/sign-message.js +2 -4
  144. package/dist/esm/utils/signatures/sign-message.js.map +1 -1
  145. package/dist/esm/version.js +1 -1
  146. package/dist/esm/wallets/in-app/core/authentication/guest.js +30 -0
  147. package/dist/esm/wallets/in-app/core/authentication/guest.js.map +1 -0
  148. package/dist/esm/wallets/in-app/core/authentication/types.js +1 -0
  149. package/dist/esm/wallets/in-app/core/authentication/types.js.map +1 -1
  150. package/dist/esm/wallets/in-app/native/auth/native-auth.js +24 -0
  151. package/dist/esm/wallets/in-app/native/auth/native-auth.js.map +1 -1
  152. package/dist/esm/wallets/in-app/native/helpers/api/fetchers.js +1 -3
  153. package/dist/esm/wallets/in-app/native/helpers/api/fetchers.js.map +1 -1
  154. package/dist/esm/wallets/in-app/native/helpers/wallet/sss.js.map +1 -1
  155. package/dist/esm/wallets/in-app/native/native-connector.js +33 -1
  156. package/dist/esm/wallets/in-app/native/native-connector.js.map +1 -1
  157. package/dist/esm/wallets/in-app/web/in-app.js +13 -1
  158. package/dist/esm/wallets/in-app/web/in-app.js.map +1 -1
  159. package/dist/esm/wallets/in-app/web/lib/web-connector.js +8 -0
  160. package/dist/esm/wallets/in-app/web/lib/web-connector.js.map +1 -1
  161. package/dist/esm/wallets/manager/index.js +5 -0
  162. package/dist/esm/wallets/manager/index.js.map +1 -1
  163. package/dist/esm/wallets/types.js +1 -0
  164. package/dist/esm/wallets/types.js.map +1 -1
  165. package/dist/esm/wallets/wallet-connect/receiver/request-handlers/switch-chain.js +2 -4
  166. package/dist/esm/wallets/wallet-connect/receiver/request-handlers/switch-chain.js.map +1 -1
  167. package/dist/types/contract/verification/index.d.ts.map +1 -1
  168. package/dist/types/extensions/erc1155/read/getNFTs.d.ts.map +1 -1
  169. package/dist/types/react/core/utils/storage.d.ts +1 -1
  170. package/dist/types/react/core/utils/storage.d.ts.map +1 -1
  171. package/dist/types/react/core/utils/walletIcon.d.ts +2 -1
  172. package/dist/types/react/core/utils/walletIcon.d.ts.map +1 -1
  173. package/dist/types/react/native/ui/components/WalletImage.d.ts.map +1 -1
  174. package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts.map +1 -1
  175. package/dist/types/react/native/ui/connect/TokenListScreen.d.ts.map +1 -1
  176. package/dist/types/react/native/ui/icons/svgs.d.ts +1 -0
  177. package/dist/types/react/native/ui/icons/svgs.d.ts.map +1 -1
  178. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
  179. package/dist/types/react/web/ui/ConnectWallet/screens/TokenSelector.d.ts.map +1 -1
  180. package/dist/types/react/web/wallets/ecosystem/EcosystemWalletHeader.d.ts.map +1 -1
  181. package/dist/types/react/web/wallets/in-app/InAppWalletConnectUI.d.ts.map +1 -1
  182. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts +3 -0
  183. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts.map +1 -1
  184. package/dist/types/react/web/wallets/shared/GuestLogin.d.ts +19 -0
  185. package/dist/types/react/web/wallets/shared/GuestLogin.d.ts.map +1 -0
  186. package/dist/types/react/web/wallets/shared/OTPLoginUI.d.ts.map +1 -1
  187. package/dist/types/react/web/wallets/shared/locale/de.d.ts +1 -0
  188. package/dist/types/react/web/wallets/shared/locale/de.d.ts.map +1 -1
  189. package/dist/types/react/web/wallets/shared/locale/en.d.ts +1 -0
  190. package/dist/types/react/web/wallets/shared/locale/en.d.ts.map +1 -1
  191. package/dist/types/react/web/wallets/shared/locale/es.d.ts +1 -0
  192. package/dist/types/react/web/wallets/shared/locale/es.d.ts.map +1 -1
  193. package/dist/types/react/web/wallets/shared/locale/fr.d.ts +1 -0
  194. package/dist/types/react/web/wallets/shared/locale/fr.d.ts.map +1 -1
  195. package/dist/types/react/web/wallets/shared/locale/ja.d.ts +1 -0
  196. package/dist/types/react/web/wallets/shared/locale/ja.d.ts.map +1 -1
  197. package/dist/types/react/web/wallets/shared/locale/kr.d.ts +1 -0
  198. package/dist/types/react/web/wallets/shared/locale/kr.d.ts.map +1 -1
  199. package/dist/types/react/web/wallets/shared/locale/tl.d.ts +1 -0
  200. package/dist/types/react/web/wallets/shared/locale/tl.d.ts.map +1 -1
  201. package/dist/types/react/web/wallets/shared/locale/types.d.ts +1 -0
  202. package/dist/types/react/web/wallets/shared/locale/types.d.ts.map +1 -1
  203. package/dist/types/react/web/wallets/shared/locale/vi.d.ts +1 -0
  204. package/dist/types/react/web/wallets/shared/locale/vi.d.ts.map +1 -1
  205. package/dist/types/react/web/wallets/shared/oauthSignIn.d.ts.map +1 -1
  206. package/dist/types/utils/any-evm/deploy-metadata.d.ts.map +1 -1
  207. package/dist/types/utils/encoding/hex.d.ts.map +1 -1
  208. package/dist/types/utils/fetch.d.ts +4 -2
  209. package/dist/types/utils/fetch.d.ts.map +1 -1
  210. package/dist/types/utils/promise/p-limit.d.ts.map +1 -1
  211. package/dist/types/version.d.ts +1 -1
  212. package/dist/types/wallets/in-app/core/authentication/guest.d.ts +12 -0
  213. package/dist/types/wallets/in-app/core/authentication/guest.d.ts.map +1 -0
  214. package/dist/types/wallets/in-app/core/authentication/types.d.ts +8 -4
  215. package/dist/types/wallets/in-app/core/authentication/types.d.ts.map +1 -1
  216. package/dist/types/wallets/in-app/core/wallet/types.d.ts +2 -1
  217. package/dist/types/wallets/in-app/core/wallet/types.d.ts.map +1 -1
  218. package/dist/types/wallets/in-app/native/auth/native-auth.d.ts +4 -3
  219. package/dist/types/wallets/in-app/native/auth/native-auth.d.ts.map +1 -1
  220. package/dist/types/wallets/in-app/native/helpers/api/fetchers.d.ts.map +1 -1
  221. package/dist/types/wallets/in-app/native/helpers/wallet/sss.d.ts.map +1 -1
  222. package/dist/types/wallets/in-app/native/native-connector.d.ts +1 -0
  223. package/dist/types/wallets/in-app/native/native-connector.d.ts.map +1 -1
  224. package/dist/types/wallets/in-app/web/in-app.d.ts +13 -1
  225. package/dist/types/wallets/in-app/web/in-app.d.ts.map +1 -1
  226. package/dist/types/wallets/in-app/web/lib/auth/oauth.d.ts +3 -3
  227. package/dist/types/wallets/in-app/web/lib/auth/oauth.d.ts.map +1 -1
  228. package/dist/types/wallets/in-app/web/lib/web-connector.d.ts.map +1 -1
  229. package/dist/types/wallets/manager/index.d.ts.map +1 -1
  230. package/dist/types/wallets/types.d.ts +2 -1
  231. package/dist/types/wallets/types.d.ts.map +1 -1
  232. package/dist/types/wallets/wallet-connect/receiver/request-handlers/switch-chain.d.ts.map +1 -1
  233. package/package.json +10 -10
  234. package/src/contract/verification/index.ts +32 -34
  235. package/src/extensions/erc1155/read/getNFTs.ts +4 -1
  236. package/src/react/core/utils/walletIcon.ts +5 -0
  237. package/src/react/native/ui/components/WalletImage.tsx +3 -0
  238. package/src/react/native/ui/connect/InAppWalletUI.tsx +30 -0
  239. package/src/react/native/ui/connect/TokenListScreen.tsx +9 -12
  240. package/src/react/native/ui/icons/svgs.ts +2 -0
  241. package/src/react/web/ui/ConnectWallet/Details.tsx +15 -2
  242. package/src/react/web/ui/ConnectWallet/screens/SignatureScreen.tsx +36 -38
  243. package/src/react/web/ui/ConnectWallet/screens/TokenSelector.tsx +34 -36
  244. package/src/react/web/ui/MediaRenderer/MediaRenderer.tsx +1 -1
  245. package/src/react/web/wallets/ecosystem/EcosystemWalletHeader.tsx +18 -20
  246. package/src/react/web/wallets/in-app/InAppWalletConnectUI.tsx +16 -0
  247. package/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +128 -101
  248. package/src/react/web/wallets/shared/GuestLogin.tsx +159 -0
  249. package/src/react/web/wallets/shared/OTPLoginUI.tsx +3 -5
  250. package/src/react/web/wallets/shared/SocialLogin.tsx +1 -1
  251. package/src/react/web/wallets/shared/locale/de.ts +2 -1
  252. package/src/react/web/wallets/shared/locale/en.ts +1 -0
  253. package/src/react/web/wallets/shared/locale/es.ts +2 -1
  254. package/src/react/web/wallets/shared/locale/fr.ts +2 -1
  255. package/src/react/web/wallets/shared/locale/ja.ts +2 -1
  256. package/src/react/web/wallets/shared/locale/kr.ts +2 -1
  257. package/src/react/web/wallets/shared/locale/tl.ts +2 -1
  258. package/src/react/web/wallets/shared/locale/types.ts +1 -0
  259. package/src/react/web/wallets/shared/locale/vi.ts +1 -0
  260. package/src/react/web/wallets/shared/oauthSignIn.ts +6 -2
  261. package/src/utils/any-evm/deploy-metadata.ts +1 -0
  262. package/src/utils/encoding/hex.ts +2 -3
  263. package/src/utils/fetch.test.ts +94 -0
  264. package/src/utils/fetch.ts +1 -12
  265. package/src/utils/promise/p-limit.ts +165 -165
  266. package/src/utils/signatures/sign-message.ts +3 -3
  267. package/src/version.ts +1 -1
  268. package/src/wallets/in-app/core/authentication/guest.ts +37 -0
  269. package/src/wallets/in-app/core/authentication/types.ts +9 -4
  270. package/src/wallets/in-app/core/wallet/types.ts +6 -1
  271. package/src/wallets/in-app/native/auth/native-auth.ts +34 -3
  272. package/src/wallets/in-app/native/helpers/api/fetchers.ts +1 -2
  273. package/src/wallets/in-app/native/helpers/wallet/sss.ts +1 -6
  274. package/src/wallets/in-app/native/native-connector.ts +42 -2
  275. package/src/wallets/in-app/web/in-app.ts +13 -1
  276. package/src/wallets/in-app/web/lib/auth/oauth.ts +3 -3
  277. package/src/wallets/in-app/web/lib/web-connector.ts +8 -0
  278. package/src/wallets/manager/index.ts +5 -0
  279. package/src/wallets/types.ts +2 -0
  280. package/src/wallets/wallet-connect/receiver/request-handlers/switch-chain.ts +2 -3
@@ -0,0 +1,159 @@
1
+ "use client";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import type { ThirdwebClient } from "../../../../client/client.js";
4
+ import { webLocalStorage } from "../../../../utils/storage/webStorage.js";
5
+ import { isEcosystemWallet } from "../../../../wallets/ecosystem/is-ecosystem-wallet.js";
6
+ import type { Wallet } from "../../../../wallets/interfaces/wallet.js";
7
+ import { setLastAuthProvider } from "../../../core/utils/storage.js";
8
+ import type { ConnectLocale } from "../../ui/ConnectWallet/locale/types.js";
9
+ import { Spacer } from "../../ui/components/Spacer.js";
10
+ import { Spinner } from "../../ui/components/Spinner.js";
11
+ import { Container, ModalHeader } from "../../ui/components/basic.js";
12
+ import { Button } from "../../ui/components/buttons.js";
13
+ import { Text } from "../../ui/components/text.js";
14
+ import type { ConnectWalletSelectUIState } from "./ConnectWalletSocialOptions.js";
15
+ import type { InAppWalletLocale } from "./locale/types.js";
16
+
17
+ /**
18
+ * @internal
19
+ */
20
+ export function GuestLogin(props: {
21
+ locale: InAppWalletLocale;
22
+ wallet: Wallet;
23
+ done: () => void;
24
+ goBack?: () => void;
25
+ state: ConnectWalletSelectUIState;
26
+ size: "compact" | "wide";
27
+ client: ThirdwebClient;
28
+ connectLocale: ConnectLocale;
29
+ }) {
30
+ const ewLocale = props.locale;
31
+ const locale = ewLocale.socialLoginScreen;
32
+
33
+ const [authError, setAuthError] = useState<string | undefined>(undefined);
34
+ const { done, wallet } = props;
35
+ const [status, setStatus] = useState<"connecting" | "connected" | "error">(
36
+ "connecting",
37
+ );
38
+
39
+ const handleGuestLogin = async () => {
40
+ const connectOptions = {
41
+ client: props.client,
42
+ ecosystem: isEcosystemWallet(wallet)
43
+ ? {
44
+ id: wallet.id,
45
+ partnerId: wallet.getConfig()?.partnerId,
46
+ }
47
+ : undefined,
48
+ strategy: "guest" as const,
49
+ };
50
+ try {
51
+ await wallet.connect(connectOptions);
52
+ await setLastAuthProvider("guest", webLocalStorage);
53
+
54
+ setStatus("connected");
55
+ done();
56
+ } catch (e) {
57
+ setStatus("error");
58
+ // TODO this only happens on 'retry' button click, not on initial login
59
+ // should pass auth error message to this component
60
+ if (
61
+ e instanceof Error &&
62
+ e?.message?.includes("PAYMENT_METHOD_REQUIRED")
63
+ ) {
64
+ setAuthError(ewLocale.maxAccountsExceeded);
65
+ }
66
+ console.error("Error generating guest account", e);
67
+ }
68
+ };
69
+
70
+ const guestLogin = props.state?.guestLogin;
71
+
72
+ const socialLoginStarted = useRef(false);
73
+ useEffect(() => {
74
+ if (socialLoginStarted.current) {
75
+ return;
76
+ }
77
+
78
+ if (guestLogin) {
79
+ socialLoginStarted.current = true;
80
+ setStatus("connecting");
81
+ guestLogin.connectionPromise
82
+ .then(() => {
83
+ done();
84
+ setStatus("connected");
85
+ })
86
+ .catch((e) => {
87
+ setAuthError(e.message);
88
+ setStatus("error");
89
+ });
90
+ }
91
+ }, [done, guestLogin]);
92
+
93
+ return (
94
+ <Container animate="fadein" flex="column" fullHeight>
95
+ <Container
96
+ flex="column"
97
+ expand
98
+ p="lg"
99
+ style={{
100
+ paddingBottom: 0,
101
+ }}
102
+ >
103
+ {props.goBack && (
104
+ <ModalHeader title={locale.title} onBack={props.goBack} />
105
+ )}
106
+
107
+ {props.size === "compact" ? <Spacer y="xl" /> : null}
108
+
109
+ <Container
110
+ flex="column"
111
+ center="both"
112
+ expand
113
+ style={{
114
+ textAlign: "center",
115
+ minHeight: "250px",
116
+ }}
117
+ >
118
+ {status !== "error" && (
119
+ <Container animate="fadein">
120
+ <Text
121
+ color="primaryText"
122
+ center
123
+ multiline
124
+ style={{
125
+ maxWidth: "250px",
126
+ }}
127
+ >
128
+ Generating your guest account
129
+ </Text>
130
+ <Spacer y="xl" />
131
+ <Container center="x" flex="row">
132
+ <Spinner size="lg" color="accentText" />
133
+ </Container>
134
+
135
+ <Spacer y="xxl" />
136
+ </Container>
137
+ )}
138
+
139
+ {status === "error" && (
140
+ <Container animate="fadein">
141
+ {authError ? (
142
+ <Text center color="danger">
143
+ {authError}
144
+ </Text>
145
+ ) : (
146
+ <Text color="danger">{locale.failed}</Text>
147
+ )}
148
+ <Spacer y="lg" />
149
+ <Button variant="primary" onClick={handleGuestLogin}>
150
+ {locale.retry}
151
+ </Button>
152
+ <Spacer y="xxl" />
153
+ </Container>
154
+ )}
155
+ </Container>
156
+ </Container>
157
+ </Container>
158
+ );
159
+ }
@@ -280,11 +280,9 @@ export function OTPLoginUI(props: {
280
280
 
281
281
  <Container p={isWideModal ? undefined : "lg"}>
282
282
  {accountStatus === "error" && (
283
- <>
284
- <Text size="sm" center color="danger">
285
- {locale.emailLoginScreen.failedToSendCode}
286
- </Text>
287
- </>
283
+ <Text size="sm" center color="danger">
284
+ {locale.emailLoginScreen.failedToSendCode}
285
+ </Text>
288
286
  )}
289
287
 
290
288
  {accountStatus === "sending" && (
@@ -50,7 +50,7 @@ export function SocialLogin(props: {
50
50
  const walletConfig = wallet.getConfig();
51
51
  const authMode =
52
52
  walletConfig && "auth" in walletConfig
53
- ? walletConfig?.auth?.mode ?? "popup"
53
+ ? (walletConfig?.auth?.mode ?? "popup")
54
54
  : "popup";
55
55
 
56
56
  if (
@@ -56,5 +56,6 @@ export default {
56
56
  signInWithPhone: "Mit Telefonnummer anmelden",
57
57
  phoneRequired: "Telefonnummer ist erforderlich",
58
58
  passkey: "Passkey",
59
- linkWallet: "Link a Wallet",
59
+ linkWallet: "Verknüpfen Sie eine Brieftasche",
60
+ loginAsGuest: "Melden Sie sich als Gast an",
60
61
  } satisfies InAppWalletLocale;
@@ -56,4 +56,5 @@ export default {
56
56
  phoneRequired: "Phone number is required",
57
57
  passkey: "Passkey",
58
58
  linkWallet: "Link a Wallet",
59
+ loginAsGuest: "Continue as guest",
59
60
  } satisfies InAppWalletLocale;
@@ -55,5 +55,6 @@ export default {
55
55
  phoneRequired: "Se requiere número de teléfono",
56
56
  signInWithEmail: "Iniciar sesión con correo electrónico",
57
57
  passkey: "Clave de acceso",
58
- linkWallet: "Link a Wallet",
58
+ linkWallet: "Vincular una billetera",
59
+ loginAsGuest: "Inicia sesión como invitado",
59
60
  } satisfies InAppWalletLocale;
@@ -56,5 +56,6 @@ export default {
56
56
  signInWithPhone: "Se connecter avec le numéro de téléphone",
57
57
  phoneRequired: "Le numéro de téléphone est requis",
58
58
  passkey: "Passkey",
59
- linkWallet: "Link a Wallet",
59
+ linkWallet: "Lier un portefeuille",
60
+ loginAsGuest: "Connectez-vous en tant qu'invité",
60
61
  } satisfies InAppWalletLocale;
@@ -54,5 +54,6 @@ export default {
54
54
  signInWithPhone: "電話番号でサインイン",
55
55
  phoneRequired: "電話番号は必須です",
56
56
  passkey: "パスキー",
57
- linkWallet: "Link a Wallet",
57
+ linkWallet: "ウォレットをリンクする",
58
+ loginAsGuest: "ゲストとしてログイン",
58
59
  } satisfies InAppWalletLocale;
@@ -52,5 +52,6 @@ export default {
52
52
  signInWithPhone: "전화번호로 로그인",
53
53
  phoneRequired: "전화번호가 필요합니다",
54
54
  passkey: "비밀번호",
55
- linkWallet: "Link a Wallet",
55
+ linkWallet: "지갑 연결",
56
+ loginAsGuest: "게스트로 로그인",
56
57
  } satisfies InAppWalletLocale;
@@ -55,5 +55,6 @@ export default {
55
55
  signInWithPhone: "Mag-login gamit ang numero ng telepono",
56
56
  phoneRequired: "Kinakailangan ang numero ng telepono",
57
57
  passkey: "Passkey",
58
- linkWallet: "Link a Wallet",
58
+ linkWallet: "Mag-link ng Wallet",
59
+ loginAsGuest: "Mag-login bilang bisita",
59
60
  } satisfies InAppWalletLocale;
@@ -50,5 +50,6 @@ export type InAppWalletLocale = {
50
50
  submitEmail: string;
51
51
  maxAccountsExceeded: string;
52
52
  passkey: string;
53
+ loginAsGuest: string;
53
54
  linkWallet: string;
54
55
  };
@@ -56,4 +56,5 @@ export default {
56
56
  phoneRequired: "Vui lòng nhập số điện thoại",
57
57
  passkey: "Passkey",
58
58
  linkWallet: "Link a Wallet",
59
+ loginAsGuest: "Đăng nhập với tư cách khách",
59
60
  } satisfies InAppWalletLocale;
@@ -1,6 +1,9 @@
1
1
  import type { ThirdwebClient } from "../../../../client/client.js";
2
2
  import { getLoginUrl } from "../../../../wallets/in-app/core/authentication/getLoginPath.js";
3
- import type { InAppWalletSocialAuth } from "../../../../wallets/in-app/core/wallet/types.js";
3
+ import type {
4
+ InAppWalletOAuth,
5
+ InAppWalletSocialAuth,
6
+ } from "../../../../wallets/in-app/core/wallet/types.js";
4
7
  import type { Ecosystem } from "../../../../wallets/in-app/web/types.js";
5
8
  import type { Theme } from "../../../core/design-system/index.js";
6
9
 
@@ -25,7 +28,7 @@ function getWidthAndHeight(authOption: InAppWalletSocialAuth) {
25
28
  }
26
29
 
27
30
  function getOauthLoginPath(
28
- authOption: InAppWalletSocialAuth,
31
+ authOption: InAppWalletOAuth,
29
32
  client: ThirdwebClient,
30
33
  ecosystem?: Ecosystem,
31
34
  ) {
@@ -37,6 +40,7 @@ function getOauthLoginPath(
37
40
  case "telegram":
38
41
  case "line":
39
42
  case "x":
43
+ case "guest":
40
44
  case "discord":
41
45
  return getLoginUrl({ authOption, client, ecosystem });
42
46
  default:
@@ -50,6 +50,7 @@ export async function fetchDeployMetadata(
50
50
  ...parsedMeta,
51
51
  version: rawMeta.version,
52
52
  bytecode: deployBytecode,
53
+ name: rawMeta.name,
53
54
  };
54
55
  }
55
56
 
@@ -436,9 +436,8 @@ export function numberToHex(
436
436
  );
437
437
  }
438
438
 
439
- const hex = `0x${(signed && value < 0
440
- ? (1n << BigInt(size * 8)) + BigInt(value)
441
- : value
439
+ const hex = `0x${(
440
+ signed && value < 0 ? (1n << BigInt(size * 8)) + BigInt(value) : value
442
441
  ).toString(16)}` as Hex;
443
442
  if (size) {
444
443
  return padHex(hex, { size }) as Hex;
@@ -0,0 +1,94 @@
1
+ import { beforeEach, describe, expect, it, vi } from "vitest";
2
+ import type { ThirdwebClient } from "../client/client.js";
3
+ import type { Ecosystem } from "../wallets/in-app/web/types.js";
4
+ import {
5
+ IS_THIRDWEB_URL_CACHE,
6
+ getClientFetch,
7
+ isThirdwebUrl,
8
+ } from "./fetch.js";
9
+
10
+ // Mock fetch
11
+ global.fetch = vi.fn();
12
+
13
+ describe("getClientFetch", () => {
14
+ const mockClient: ThirdwebClient = {
15
+ clientId: "test-client-id",
16
+ secretKey: undefined,
17
+ };
18
+ const mockEcosystem: Ecosystem = { id: "ecosystem.test" };
19
+
20
+ beforeEach(() => {
21
+ vi.resetAllMocks();
22
+ });
23
+
24
+ it("should set correct headers for thirdweb URLs", async () => {
25
+ vi.spyOn(global, "fetch").mockResolvedValue(new Response());
26
+ const clientFetch = getClientFetch(mockClient, mockEcosystem);
27
+ await clientFetch("https://api.thirdweb.com/test");
28
+
29
+ expect(global.fetch).toHaveBeenCalledWith(
30
+ "https://api.thirdweb.com/test",
31
+ expect.objectContaining({
32
+ headers: expect.any(Headers),
33
+ }),
34
+ );
35
+
36
+ // biome-ignore lint/suspicious/noExplicitAny: `any` type ok for tests
37
+ const headers = (global.fetch as any).mock.calls[0][1].headers;
38
+ expect(headers.get("x-client-id")).toBe("test-client-id");
39
+ expect(headers.get("x-ecosystem-id")).toBe("ecosystem.test");
40
+ });
41
+
42
+ it("should not set headers for non-thirdweb URLs", async () => {
43
+ vi.spyOn(global, "fetch").mockResolvedValue(new Response());
44
+ const clientFetch = getClientFetch(mockClient, mockEcosystem);
45
+ await clientFetch("https://example.com");
46
+
47
+ expect(global.fetch).toHaveBeenCalledWith(
48
+ "https://example.com",
49
+ expect.not.objectContaining({
50
+ headers: expect.any(Headers),
51
+ }),
52
+ );
53
+ });
54
+
55
+ it("should abort the request after timeout", async () => {
56
+ vi.useFakeTimers();
57
+ const abortSpy = vi.spyOn(AbortController.prototype, "abort");
58
+ const clientFetch = getClientFetch(mockClient);
59
+
60
+ const fetchPromise = clientFetch("https://api.thirdweb.com/test", {
61
+ requestTimeoutMs: 5000,
62
+ });
63
+ vi.advanceTimersByTime(5001);
64
+
65
+ await expect(fetchPromise).rejects.toThrow();
66
+ expect(abortSpy).toHaveBeenCalled();
67
+
68
+ vi.useRealTimers();
69
+ });
70
+ });
71
+
72
+ describe("isThirdwebUrl", () => {
73
+ it("should return true for thirdweb domains", () => {
74
+ expect(isThirdwebUrl("https://api.thirdweb.com")).toBe(true);
75
+ expect(isThirdwebUrl("https://example.ipfscdn.io")).toBe(true);
76
+ });
77
+
78
+ it("should return false for non-thirdweb domains", () => {
79
+ expect(isThirdwebUrl("https://example.com")).toBe(false);
80
+ expect(isThirdwebUrl("https://otherthirdweb.com")).toBe(false);
81
+ });
82
+
83
+ it("should handle invalid URLs", () => {
84
+ expect(isThirdwebUrl("not-a-url")).toBe(false);
85
+ });
86
+
87
+ it("should cache results", () => {
88
+ const url = "https://api.thirdweb.com";
89
+ isThirdwebUrl(url);
90
+ isThirdwebUrl(url);
91
+ // You might need to expose the cache to test this properly
92
+ expect(IS_THIRDWEB_URL_CACHE.get(url)).toBe(true);
93
+ });
94
+ });
@@ -10,20 +10,10 @@ import {
10
10
 
11
11
  const DEFAULT_REQUEST_TIMEOUT = 60000;
12
12
 
13
- const FETCH_CACHE = new WeakMap<
14
- { client: ThirdwebClient; ecosystem?: Ecosystem },
15
- (url: string, init?: RequestInit) => Promise<Response>
16
- >();
17
-
18
13
  /**
19
14
  * @internal
20
15
  */
21
16
  export function getClientFetch(client: ThirdwebClient, ecosystem?: Ecosystem) {
22
- if (FETCH_CACHE.has({ client, ecosystem })) {
23
- // biome-ignore lint/style/noNonNullAssertion: the `has` above ensures that this will always be set
24
- return FETCH_CACHE.get({ client, ecosystem })!;
25
- }
26
-
27
17
  /**
28
18
  * @internal
29
19
  */
@@ -83,7 +73,6 @@ export function getClientFetch(client: ThirdwebClient, ecosystem?: Ecosystem) {
83
73
  }
84
74
  });
85
75
  }
86
- FETCH_CACHE.set({ client, ecosystem }, fetchWithHeaders);
87
76
  return fetchWithHeaders;
88
77
  }
89
78
 
@@ -96,7 +85,7 @@ const THIRDWEB_DOMAINS = [
96
85
  ".thirdweb-dev.com",
97
86
  ] as const;
98
87
 
99
- const IS_THIRDWEB_URL_CACHE = new LruMap<boolean>(4096);
88
+ export const IS_THIRDWEB_URL_CACHE = new LruMap<boolean>(4096);
100
89
 
101
90
  /**
102
91
  * @internal