thirdweb 5.36.1-nightly-af4acc4319fdfb323778694bd8843bd695e52d6b-20240719161043 → 5.37.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 (265) hide show
  1. package/dist/cjs/extensions/erc4337/account/addSessionKey.js +1 -0
  2. package/dist/cjs/extensions/erc4337/account/addSessionKey.js.map +1 -1
  3. package/dist/cjs/react/core/utils/socialIcons.js +1 -0
  4. package/dist/cjs/react/core/utils/socialIcons.js.map +1 -1
  5. package/dist/cjs/react/native/ui/components/WalletImage.js +2 -0
  6. package/dist/cjs/react/native/ui/components/WalletImage.js.map +1 -1
  7. package/dist/cjs/react/native/ui/connect/ConnectModal.js +2 -2
  8. package/dist/cjs/react/native/ui/connect/InAppWalletUI.js +4 -3
  9. package/dist/cjs/react/native/ui/connect/InAppWalletUI.js.map +1 -1
  10. package/dist/cjs/react/native/ui/icons/svgs.js +8 -1
  11. package/dist/cjs/react/native/ui/icons/svgs.js.map +1 -1
  12. package/dist/cjs/react/web/ui/ConnectWallet/Details.js +11 -4
  13. package/dist/cjs/react/web/ui/ConnectWallet/Details.js.map +1 -1
  14. package/dist/cjs/react/web/ui/ConnectWallet/TransactionsScreen.js +4 -3
  15. package/dist/cjs/react/web/ui/ConnectWallet/TransactionsScreen.js.map +1 -1
  16. package/dist/cjs/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js +9 -0
  17. package/dist/cjs/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js.map +1 -0
  18. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js +3 -2
  19. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js.map +1 -1
  20. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js +7 -6
  21. package/dist/cjs/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js.map +1 -1
  22. package/dist/cjs/react/web/ui/components/Modal.js +1 -4
  23. package/dist/cjs/react/web/ui/components/Modal.js.map +1 -1
  24. package/dist/cjs/react/web/ui/components/Tabs.js +8 -9
  25. package/dist/cjs/react/web/ui/components/Tabs.js.map +1 -1
  26. package/dist/cjs/react/web/ui/components/WalletImage.js +3 -0
  27. package/dist/cjs/react/web/ui/components/WalletImage.js.map +1 -1
  28. package/dist/cjs/react/web/ui/components/buttons.js +1 -1
  29. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js +17 -3
  30. package/dist/cjs/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  31. package/dist/cjs/react/web/wallets/shared/SocialLogin.js +12 -1
  32. package/dist/cjs/react/web/wallets/shared/SocialLogin.js.map +1 -1
  33. package/dist/cjs/react/web/wallets/shared/locale/en.js +1 -0
  34. package/dist/cjs/react/web/wallets/shared/locale/en.js.map +1 -1
  35. package/dist/cjs/react/web/wallets/shared/locale/es.js +1 -0
  36. package/dist/cjs/react/web/wallets/shared/locale/es.js.map +1 -1
  37. package/dist/cjs/react/web/wallets/shared/locale/ja.js +1 -0
  38. package/dist/cjs/react/web/wallets/shared/locale/ja.js.map +1 -1
  39. package/dist/cjs/react/web/wallets/shared/locale/tl.js +1 -0
  40. package/dist/cjs/react/web/wallets/shared/locale/tl.js.map +1 -1
  41. package/dist/cjs/react/web/wallets/shared/locale/vi.js +1 -0
  42. package/dist/cjs/react/web/wallets/shared/locale/vi.js.map +1 -1
  43. package/dist/cjs/react/web/wallets/shared/openOauthSignInWindow.js +11 -2
  44. package/dist/cjs/react/web/wallets/shared/openOauthSignInWindow.js.map +1 -1
  45. package/dist/cjs/transaction/actions/encode.js +55 -10
  46. package/dist/cjs/transaction/actions/encode.js.map +1 -1
  47. package/dist/cjs/transaction/actions/estimate-gas.js +1 -1
  48. package/dist/cjs/transaction/actions/estimate-gas.js.map +1 -1
  49. package/dist/cjs/transaction/prepare-contract-call.js +17 -0
  50. package/dist/cjs/transaction/prepare-contract-call.js.map +1 -1
  51. package/dist/cjs/transaction/prepare-transaction.js.map +1 -1
  52. package/dist/cjs/version.js +1 -1
  53. package/dist/cjs/version.js.map +1 -1
  54. package/dist/cjs/wallets/in-app/core/authentication/getLoginPath.js +17 -0
  55. package/dist/cjs/wallets/in-app/core/authentication/getLoginPath.js.map +1 -0
  56. package/dist/cjs/wallets/in-app/core/authentication/type.js +2 -0
  57. package/dist/cjs/wallets/in-app/core/authentication/type.js.map +1 -1
  58. package/dist/cjs/wallets/in-app/native/auth/native-auth.js +11 -2
  59. package/dist/cjs/wallets/in-app/native/auth/native-auth.js.map +1 -1
  60. package/dist/cjs/wallets/in-app/native/helpers/auth/middleware.js +4 -1
  61. package/dist/cjs/wallets/in-app/native/helpers/auth/middleware.js.map +1 -1
  62. package/dist/cjs/wallets/in-app/native/helpers/constants.js +10 -4
  63. package/dist/cjs/wallets/in-app/native/helpers/constants.js.map +1 -1
  64. package/dist/cjs/wallets/in-app/native/helpers/wallet/recoveryCode.js +47 -5
  65. package/dist/cjs/wallets/in-app/native/helpers/wallet/recoveryCode.js.map +1 -1
  66. package/dist/cjs/wallets/in-app/native/native-connector.js +1 -0
  67. package/dist/cjs/wallets/in-app/native/native-connector.js.map +1 -1
  68. package/dist/cjs/wallets/in-app/web/lib/auth/constants.js +5 -0
  69. package/dist/cjs/wallets/in-app/web/lib/auth/constants.js.map +1 -0
  70. package/dist/cjs/wallets/in-app/web/lib/auth/discord.js +72 -0
  71. package/dist/cjs/wallets/in-app/web/lib/auth/discord.js.map +1 -0
  72. package/dist/cjs/wallets/in-app/web/lib/auth/utils.js +18 -0
  73. package/dist/cjs/wallets/in-app/web/lib/auth/utils.js.map +1 -0
  74. package/dist/cjs/wallets/in-app/web/lib/web-connector.js +10 -0
  75. package/dist/cjs/wallets/in-app/web/lib/web-connector.js.map +1 -1
  76. package/dist/cjs/wallets/types.js +7 -0
  77. package/dist/cjs/wallets/types.js.map +1 -1
  78. package/dist/esm/extensions/erc4337/account/addSessionKey.js +1 -0
  79. package/dist/esm/extensions/erc4337/account/addSessionKey.js.map +1 -1
  80. package/dist/esm/react/core/utils/socialIcons.js +1 -0
  81. package/dist/esm/react/core/utils/socialIcons.js.map +1 -1
  82. package/dist/esm/react/native/ui/components/WalletImage.js +3 -1
  83. package/dist/esm/react/native/ui/components/WalletImage.js.map +1 -1
  84. package/dist/esm/react/native/ui/connect/ConnectModal.js +2 -2
  85. package/dist/esm/react/native/ui/connect/InAppWalletUI.js +5 -4
  86. package/dist/esm/react/native/ui/connect/InAppWalletUI.js.map +1 -1
  87. package/dist/esm/react/native/ui/icons/svgs.js +7 -0
  88. package/dist/esm/react/native/ui/icons/svgs.js.map +1 -1
  89. package/dist/esm/react/web/ui/ConnectWallet/Details.js +12 -5
  90. package/dist/esm/react/web/ui/ConnectWallet/Details.js.map +1 -1
  91. package/dist/esm/react/web/ui/ConnectWallet/TransactionsScreen.js +4 -3
  92. package/dist/esm/react/web/ui/ConnectWallet/TransactionsScreen.js.map +1 -1
  93. package/dist/esm/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js +5 -0
  94. package/dist/esm/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.js.map +1 -0
  95. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js +3 -2
  96. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.js.map +1 -1
  97. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js +7 -6
  98. package/dist/esm/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.js.map +1 -1
  99. package/dist/esm/react/web/ui/components/Modal.js +1 -4
  100. package/dist/esm/react/web/ui/components/Modal.js.map +1 -1
  101. package/dist/esm/react/web/ui/components/Tabs.js +9 -10
  102. package/dist/esm/react/web/ui/components/Tabs.js.map +1 -1
  103. package/dist/esm/react/web/ui/components/WalletImage.js +4 -1
  104. package/dist/esm/react/web/ui/components/WalletImage.js.map +1 -1
  105. package/dist/esm/react/web/ui/components/buttons.js +1 -1
  106. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js +17 -3
  107. package/dist/esm/react/web/wallets/shared/ConnectWalletSocialOptions.js.map +1 -1
  108. package/dist/esm/react/web/wallets/shared/SocialLogin.js +12 -1
  109. package/dist/esm/react/web/wallets/shared/SocialLogin.js.map +1 -1
  110. package/dist/esm/react/web/wallets/shared/locale/en.js +1 -0
  111. package/dist/esm/react/web/wallets/shared/locale/en.js.map +1 -1
  112. package/dist/esm/react/web/wallets/shared/locale/es.js +1 -0
  113. package/dist/esm/react/web/wallets/shared/locale/es.js.map +1 -1
  114. package/dist/esm/react/web/wallets/shared/locale/ja.js +1 -0
  115. package/dist/esm/react/web/wallets/shared/locale/ja.js.map +1 -1
  116. package/dist/esm/react/web/wallets/shared/locale/tl.js +1 -0
  117. package/dist/esm/react/web/wallets/shared/locale/tl.js.map +1 -1
  118. package/dist/esm/react/web/wallets/shared/locale/vi.js +1 -0
  119. package/dist/esm/react/web/wallets/shared/locale/vi.js.map +1 -1
  120. package/dist/esm/react/web/wallets/shared/openOauthSignInWindow.js +11 -2
  121. package/dist/esm/react/web/wallets/shared/openOauthSignInWindow.js.map +1 -1
  122. package/dist/esm/transaction/actions/encode.js +53 -10
  123. package/dist/esm/transaction/actions/encode.js.map +1 -1
  124. package/dist/esm/transaction/actions/estimate-gas.js +1 -1
  125. package/dist/esm/transaction/actions/estimate-gas.js.map +1 -1
  126. package/dist/esm/transaction/prepare-contract-call.js +17 -0
  127. package/dist/esm/transaction/prepare-contract-call.js.map +1 -1
  128. package/dist/esm/transaction/prepare-transaction.js.map +1 -1
  129. package/dist/esm/version.js +1 -1
  130. package/dist/esm/version.js.map +1 -1
  131. package/dist/esm/wallets/in-app/core/authentication/getLoginPath.js +13 -0
  132. package/dist/esm/wallets/in-app/core/authentication/getLoginPath.js.map +1 -0
  133. package/dist/esm/wallets/in-app/core/authentication/type.js +2 -0
  134. package/dist/esm/wallets/in-app/core/authentication/type.js.map +1 -1
  135. package/dist/esm/wallets/in-app/native/auth/native-auth.js +11 -2
  136. package/dist/esm/wallets/in-app/native/auth/native-auth.js.map +1 -1
  137. package/dist/esm/wallets/in-app/native/helpers/auth/middleware.js +5 -2
  138. package/dist/esm/wallets/in-app/native/helpers/auth/middleware.js.map +1 -1
  139. package/dist/esm/wallets/in-app/native/helpers/constants.js +9 -3
  140. package/dist/esm/wallets/in-app/native/helpers/constants.js.map +1 -1
  141. package/dist/esm/wallets/in-app/native/helpers/wallet/recoveryCode.js +46 -6
  142. package/dist/esm/wallets/in-app/native/helpers/wallet/recoveryCode.js.map +1 -1
  143. package/dist/esm/wallets/in-app/native/native-connector.js +1 -0
  144. package/dist/esm/wallets/in-app/native/native-connector.js.map +1 -1
  145. package/dist/esm/wallets/in-app/web/lib/auth/constants.js +2 -0
  146. package/dist/esm/wallets/in-app/web/lib/auth/constants.js.map +1 -0
  147. package/dist/esm/wallets/in-app/web/lib/auth/discord.js +69 -0
  148. package/dist/esm/wallets/in-app/web/lib/auth/discord.js.map +1 -0
  149. package/dist/esm/wallets/in-app/web/lib/auth/utils.js +14 -0
  150. package/dist/esm/wallets/in-app/web/lib/auth/utils.js.map +1 -0
  151. package/dist/esm/wallets/in-app/web/lib/web-connector.js +10 -0
  152. package/dist/esm/wallets/in-app/web/lib/web-connector.js.map +1 -1
  153. package/dist/esm/wallets/types.js +6 -1
  154. package/dist/esm/wallets/types.js.map +1 -1
  155. package/dist/types/extensions/erc4337/account/addSessionKey.d.ts +2 -1
  156. package/dist/types/extensions/erc4337/account/addSessionKey.d.ts.map +1 -1
  157. package/dist/types/react/core/utils/socialIcons.d.ts +1 -0
  158. package/dist/types/react/core/utils/socialIcons.d.ts.map +1 -1
  159. package/dist/types/react/core/utils/storage.d.ts +1 -1
  160. package/dist/types/react/core/utils/storage.d.ts.map +1 -1
  161. package/dist/types/react/native/ui/components/WalletImage.d.ts.map +1 -1
  162. package/dist/types/react/native/ui/connect/InAppWalletUI.d.ts.map +1 -1
  163. package/dist/types/react/native/ui/icons/svgs.d.ts +1 -0
  164. package/dist/types/react/native/ui/icons/svgs.d.ts.map +1 -1
  165. package/dist/types/react/web/ui/ConnectWallet/Details.d.ts.map +1 -1
  166. package/dist/types/react/web/ui/ConnectWallet/TransactionsScreen.d.ts.map +1 -1
  167. package/dist/types/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.d.ts +3 -0
  168. package/dist/types/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.d.ts.map +1 -0
  169. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.d.ts.map +1 -1
  170. package/dist/types/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.d.ts.map +1 -1
  171. package/dist/types/react/web/ui/components/Modal.d.ts.map +1 -1
  172. package/dist/types/react/web/ui/components/Tabs.d.ts.map +1 -1
  173. package/dist/types/react/web/ui/components/WalletImage.d.ts.map +1 -1
  174. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts +1 -1
  175. package/dist/types/react/web/wallets/shared/ConnectWalletSocialOptions.d.ts.map +1 -1
  176. package/dist/types/react/web/wallets/shared/SocialLogin.d.ts.map +1 -1
  177. package/dist/types/react/web/wallets/shared/locale/en.d.ts +1 -0
  178. package/dist/types/react/web/wallets/shared/locale/en.d.ts.map +1 -1
  179. package/dist/types/react/web/wallets/shared/locale/es.d.ts +1 -0
  180. package/dist/types/react/web/wallets/shared/locale/es.d.ts.map +1 -1
  181. package/dist/types/react/web/wallets/shared/locale/ja.d.ts +1 -0
  182. package/dist/types/react/web/wallets/shared/locale/ja.d.ts.map +1 -1
  183. package/dist/types/react/web/wallets/shared/locale/tl.d.ts +1 -0
  184. package/dist/types/react/web/wallets/shared/locale/tl.d.ts.map +1 -1
  185. package/dist/types/react/web/wallets/shared/locale/types.d.ts +1 -0
  186. package/dist/types/react/web/wallets/shared/locale/types.d.ts.map +1 -1
  187. package/dist/types/react/web/wallets/shared/locale/vi.d.ts +1 -0
  188. package/dist/types/react/web/wallets/shared/locale/vi.d.ts.map +1 -1
  189. package/dist/types/react/web/wallets/shared/openOauthSignInWindow.d.ts +8 -1
  190. package/dist/types/react/web/wallets/shared/openOauthSignInWindow.d.ts.map +1 -1
  191. package/dist/types/transaction/actions/encode.d.ts +13 -0
  192. package/dist/types/transaction/actions/encode.d.ts.map +1 -1
  193. package/dist/types/transaction/prepare-contract-call.d.ts +17 -0
  194. package/dist/types/transaction/prepare-contract-call.d.ts.map +1 -1
  195. package/dist/types/transaction/prepare-transaction.d.ts +1 -0
  196. package/dist/types/transaction/prepare-transaction.d.ts.map +1 -1
  197. package/dist/types/version.d.ts +1 -1
  198. package/dist/types/version.d.ts.map +1 -1
  199. package/dist/types/wallets/in-app/core/authentication/getLoginPath.d.ts +4 -0
  200. package/dist/types/wallets/in-app/core/authentication/getLoginPath.d.ts.map +1 -0
  201. package/dist/types/wallets/in-app/core/authentication/type.d.ts +3 -2
  202. package/dist/types/wallets/in-app/core/authentication/type.d.ts.map +1 -1
  203. package/dist/types/wallets/in-app/native/auth/native-auth.d.ts.map +1 -1
  204. package/dist/types/wallets/in-app/native/helpers/auth/middleware.d.ts.map +1 -1
  205. package/dist/types/wallets/in-app/native/helpers/constants.d.ts +18 -14
  206. package/dist/types/wallets/in-app/native/helpers/constants.d.ts.map +1 -1
  207. package/dist/types/wallets/in-app/native/helpers/wallet/recoveryCode.d.ts +3 -1
  208. package/dist/types/wallets/in-app/native/helpers/wallet/recoveryCode.d.ts.map +1 -1
  209. package/dist/types/wallets/in-app/native/native-connector.d.ts.map +1 -1
  210. package/dist/types/wallets/in-app/web/lib/auth/constants.d.ts +2 -0
  211. package/dist/types/wallets/in-app/web/lib/auth/constants.d.ts.map +1 -0
  212. package/dist/types/wallets/in-app/web/lib/auth/discord.d.ts +10 -0
  213. package/dist/types/wallets/in-app/web/lib/auth/discord.d.ts.map +1 -0
  214. package/dist/types/wallets/in-app/web/lib/auth/utils.d.ts +6 -0
  215. package/dist/types/wallets/in-app/web/lib/auth/utils.d.ts.map +1 -0
  216. package/dist/types/wallets/in-app/web/lib/web-connector.d.ts.map +1 -1
  217. package/dist/types/wallets/types.d.ts +2 -1
  218. package/dist/types/wallets/types.d.ts.map +1 -1
  219. package/package.json +1 -1
  220. package/src/extensions/erc4337/account/addSessionKey.ts +2 -1
  221. package/src/react/core/utils/socialIcons.ts +1 -0
  222. package/src/react/core/utils/wait.test.ts +1 -1
  223. package/src/react/native/ui/components/WalletImage.tsx +3 -0
  224. package/src/react/native/ui/connect/ConnectModal.tsx +2 -2
  225. package/src/react/native/ui/connect/InAppWalletUI.tsx +9 -6
  226. package/src/react/native/ui/icons/svgs.ts +8 -0
  227. package/src/react/web/ui/ConnectWallet/Details.tsx +15 -5
  228. package/src/react/web/ui/ConnectWallet/TransactionsScreen.tsx +23 -23
  229. package/src/react/web/ui/ConnectWallet/icons/ShuffleIconLucide.tsx +24 -0
  230. package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/BuyTxHistory.tsx +3 -2
  231. package/src/react/web/ui/ConnectWallet/screens/WalletTransactionHistory.tsx +19 -23
  232. package/src/react/web/ui/components/Modal.tsx +1 -4
  233. package/src/react/web/ui/components/Tabs.tsx +23 -18
  234. package/src/react/web/ui/components/WalletImage.tsx +4 -0
  235. package/src/react/web/ui/components/buttons.tsx +1 -1
  236. package/src/react/web/wallets/shared/ConnectWalletSocialOptions.tsx +23 -9
  237. package/src/react/web/wallets/shared/SocialLogin.tsx +12 -1
  238. package/src/react/web/wallets/shared/locale/en.ts +1 -0
  239. package/src/react/web/wallets/shared/locale/es.ts +1 -0
  240. package/src/react/web/wallets/shared/locale/ja.ts +1 -0
  241. package/src/react/web/wallets/shared/locale/tl.ts +1 -0
  242. package/src/react/web/wallets/shared/locale/types.ts +1 -0
  243. package/src/react/web/wallets/shared/locale/vi.ts +1 -0
  244. package/src/react/web/wallets/shared/openOauthSignInWindow.ts +28 -5
  245. package/src/transaction/actions/encode.test.ts +152 -3
  246. package/src/transaction/actions/encode.ts +59 -10
  247. package/src/transaction/actions/estimate-gas.ts +1 -1
  248. package/src/transaction/actions/to-serializable-transaction.test.ts +16 -0
  249. package/src/transaction/prepare-contract-call.test.ts +3 -5
  250. package/src/transaction/prepare-contract-call.ts +17 -0
  251. package/src/transaction/prepare-transaction.ts +1 -0
  252. package/src/utils/promise/wait.test.ts +1 -1
  253. package/src/version.ts +1 -1
  254. package/src/wallets/in-app/core/authentication/getLoginPath.ts +18 -0
  255. package/src/wallets/in-app/core/authentication/type.ts +3 -1
  256. package/src/wallets/in-app/native/auth/native-auth.ts +16 -6
  257. package/src/wallets/in-app/native/helpers/auth/middleware.ts +8 -2
  258. package/src/wallets/in-app/native/helpers/constants.ts +12 -3
  259. package/src/wallets/in-app/native/helpers/wallet/recoveryCode.ts +75 -8
  260. package/src/wallets/in-app/native/native-connector.ts +1 -0
  261. package/src/wallets/in-app/web/lib/auth/constants.ts +1 -0
  262. package/src/wallets/in-app/web/lib/auth/discord.ts +92 -0
  263. package/src/wallets/in-app/web/lib/auth/utils.ts +19 -0
  264. package/src/wallets/in-app/web/lib/web-connector.ts +11 -0
  265. package/src/wallets/types.ts +7 -1
@@ -1,13 +1,11 @@
1
- import { describe, expect, test } from "vitest";
2
-
1
+ import { describe, expect, it } from "vitest";
3
2
  import { TEST_WALLET_B } from "../../test/src/addresses.js";
4
-
5
3
  import { USDT_CONTRACT_WITH_ABI } from "../../test/src/test-contracts.js";
6
4
  import { toWei } from "../utils/units.js";
7
5
  import { prepareContractCall } from "./prepare-contract-call.js";
8
6
 
9
- describe("prepareContractCall", () => {
10
- test("should prepare a contract call with ABI", () => {
7
+ describe.runIf(process.env.TW_SECRET_KEY)("prepareContractCall", () => {
8
+ it("should prepare a contract call with ABI", () => {
11
9
  const preparedTx = prepareContractCall({
12
10
  contract: USDT_CONTRACT_WITH_ABI,
13
11
  method: "transfer",
@@ -121,6 +121,23 @@ export type PrepareContractCallOptions<
121
121
  * params: [to, value],
122
122
  * });
123
123
  * ```
124
+ *
125
+ * @example
126
+ * Passing extra call data to the transaction
127
+ * ```ts
128
+ * import { getContract, prepareContractCall } from "thirdweb";
129
+ * const contract = getContract({
130
+ * ..., // chain, address, client
131
+ * });
132
+ *
133
+ * const transaction = prepareContractCall({
134
+ * contract,
135
+ * method: "function transfer(address to, uint256 value)",
136
+ * params: [...],
137
+ * // The extra call data MUST be encoded to hex before passing
138
+ * extraCallData: "0x......."
139
+ * });
140
+ * ```
124
141
  */
125
142
  export function prepareContractCall<
126
143
  const TAbi extends Abi,
@@ -24,6 +24,7 @@ export type StaticPrepareTransactionOptions = {
24
24
  chain: Chain;
25
25
  client: ThirdwebClient;
26
26
  // extras
27
+ extraCallData?: Hex;
27
28
  erc20Value?: {
28
29
  amountWei: bigint;
29
30
  tokenAddress: Address;
@@ -8,6 +8,6 @@ describe("wait", () => {
8
8
  await wait(ms);
9
9
  const end = Date.now();
10
10
  const elapsed = end - start;
11
- expect(elapsed).toBeGreaterThanOrEqual(ms);
11
+ expect(Math.abs(elapsed - ms)).toBeLessThan(10);
12
12
  });
13
13
  });
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.36.1-nightly-af4acc4319fdfb323778694bd8843bd695e52d6b-20240719161043";
1
+ export const version = "5.37.0";
@@ -0,0 +1,18 @@
1
+ import type { ThirdwebClient } from "../../../../client/client.js";
2
+ import { getThirdwebBaseUrl } from "../../../../utils/domains.js";
3
+ import type { Ecosystem } from "../../web/types.js";
4
+
5
+ // TODO: make this generic for all auth providers
6
+ export const getDiscordLoginPath = (
7
+ client: ThirdwebClient,
8
+ ecosystem?: Ecosystem,
9
+ ) => {
10
+ const baseUrl = `${getThirdwebBaseUrl("inAppWallet")}/api/2024-05-05/login/discord?clientId=${client.clientId}`;
11
+ if (ecosystem?.partnerId) {
12
+ return `${baseUrl}&ecosystemId=${ecosystem.id}&ecosystemPartnerId=${ecosystem.partnerId}`;
13
+ }
14
+ if (ecosystem) {
15
+ return `${baseUrl}&ecosystemId=${ecosystem.id}`;
16
+ }
17
+ return baseUrl;
18
+ };
@@ -61,6 +61,7 @@ export enum AuthProvider {
61
61
  FACEBOOK = "Facebook",
62
62
  APPLE = "Apple",
63
63
  PASSKEY = "Passkey",
64
+ DISCORD = "Discord",
64
65
  }
65
66
 
66
67
  export type OauthOption = {
@@ -208,10 +209,11 @@ export type GetAuthenticatedUserParams = {
208
209
  };
209
210
 
210
211
  export const oauthStrategyToAuthProvider: Record<
211
- "google" | "facebook" | "apple",
212
+ SocialAuthOption,
212
213
  AuthProvider
213
214
  > = {
214
215
  google: AuthProvider.GOOGLE,
215
216
  facebook: AuthProvider.FACEBOOK,
216
217
  apple: AuthProvider.APPLE,
218
+ discord: AuthProvider.DISCORD,
217
219
  };
@@ -3,6 +3,7 @@ import type { CognitoUser } from "amazon-cognito-identity-js";
3
3
  import { Auth } from "aws-amplify";
4
4
  import * as WebBrowser from "expo-web-browser";
5
5
  import type { ThirdwebClient } from "../../../../client/client.js";
6
+ import { getDiscordLoginPath } from "../../core/authentication/getLoginPath.js";
6
7
  import {
7
8
  AuthProvider,
8
9
  type AuthStoredTokenWithCookieReturnType,
@@ -229,15 +230,24 @@ export async function socialLogin(
229
230
 
230
231
  const { platformLoginLink } = json;
231
232
 
232
- const completeLoginUrl = `${platformLoginLink}?developerClientId=${encodeURIComponent(
233
- client.clientId,
234
- )}&platform=${encodeURIComponent("mobile")}&redirectUrl=${encodeURIComponent(
235
- oauthOptions.redirectUrl,
236
- )}&authOption=${encodedProvider}`;
233
+ // Temporary fork for discord until we migrate all methods to the new auth flow
234
+ const loginUrl = (() => {
235
+ if (oauthOptions.provider === AuthProvider.DISCORD) {
236
+ return `${getDiscordLoginPath(client)}&redirectUrl=${encodeURIComponent(
237
+ oauthOptions.redirectUrl,
238
+ )}`;
239
+ } else {
240
+ return `${platformLoginLink}?developerClientId=${encodeURIComponent(
241
+ client.clientId,
242
+ )}&platform=${encodeURIComponent("mobile")}&redirectUrl=${encodeURIComponent(
243
+ oauthOptions.redirectUrl,
244
+ )}&authOption=${encodedProvider}`;
245
+ }
246
+ })();
237
247
 
238
248
  // TODO platform specific code should be extracted out
239
249
  const result = await WebBrowser.openAuthSessionAsync(
240
- completeLoginUrl,
250
+ loginUrl,
241
251
  oauthOptions.redirectUrl,
242
252
  {
243
253
  preferEphemeralSession: false,
@@ -11,7 +11,10 @@ import {
11
11
  setWallerUserDetails,
12
12
  } from "../storage/local.js";
13
13
  import { setUpNewUserWallet } from "../wallet/creation.js";
14
- import { getCognitoRecoveryPassword } from "../wallet/recoveryCode.js";
14
+ import {
15
+ getCognitoRecoveryPasswordV1,
16
+ getCognitoRecoveryPasswordV2,
17
+ } from "../wallet/recoveryCode.js";
15
18
  import { setUpShareForNewDevice } from "../wallet/retrieval.js";
16
19
 
17
20
  export async function preAuth(args: {
@@ -151,7 +154,10 @@ async function getRecoveryCode(
151
154
  return recoveryCode;
152
155
  } else {
153
156
  try {
154
- const code = await getCognitoRecoveryPassword(client);
157
+ // temporary fork for discord until we migrate all methods to the new auth flow
158
+ const code = await (storedToken.authProvider === AuthProvider.DISCORD
159
+ ? getCognitoRecoveryPasswordV2(client)
160
+ : getCognitoRecoveryPasswordV1(client));
155
161
  return code;
156
162
  } catch (e) {
157
163
  throw new Error("Something went wrong getting cognito recovery code");
@@ -1,3 +1,5 @@
1
+ import { getThirdwebBaseUrl } from "../../../../utils/domains.js";
2
+
1
3
  export const AUTH_SHARE_ID = 3;
2
4
  export const AUTH_SHARE_INDEX = AUTH_SHARE_ID - 1;
3
5
  export const NO_EXISTING_WALLET_FOUND_FOR_USER =
@@ -19,13 +21,18 @@ export const COGNITO_USER_POOL_ID = "us-west-2_UFwLcZIpq";
19
21
  export const COGNITO_APP_CLIENT_ID = "2e02ha2ce6du13ldk8pai4h3d0";
20
22
  export const COGNITO_IDENTITY_POOL_ID =
21
23
  "us-west-2:2ad7ab1e-f48b-48a6-adfa-ac1090689c26";
22
- export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION =
24
+ export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V1 =
23
25
  "arn:aws:lambda:us-west-2:324457261097:function:recovery-share-password-GenerateRecoverySharePassw-bbE5ZbVAToil";
26
+ export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2 =
27
+ "arn:aws:lambda:us-west-2:324457261097:function:lambda-thirdweb-auth-enc-key-prod-ThirdwebAuthEncKeyFunction";
28
+ export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION =
29
+ GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2;
24
30
 
25
31
  // TODO allow overriding domain
26
- export const DOMAIN_URL_2023 = "https://embedded-wallet.thirdweb.com";
32
+ export const DOMAIN_URL_2023 = getThirdwebBaseUrl("inAppWallet");
27
33
  const BASE_URL_2023 = `${DOMAIN_URL_2023}/`;
28
34
  const ROUTE_2023_10_20_API_BASE_PATH = `${BASE_URL_2023}api/2023-10-20`;
35
+ const ROUTE_2024_05_05_API_BASE_PATH = `${BASE_URL_2023}api/2024-05-05`;
29
36
 
30
37
  export const ROUTE_EMBEDDED_WALLET_DETAILS = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/embedded-wallet-user-details`;
31
38
  export const ROUTE_VERIFY_COGNITO_OTP = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/validate-cognito-email-otp`;
@@ -43,4 +50,6 @@ export const ROUTE_IS_VALID_USER_MANAGED_OTP = `${ROUTE_2023_10_20_API_BASE_PATH
43
50
 
44
51
  export const ROUTE_HEADLESS_OAUTH_LOGIN = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/headless-oauth-login-link`;
45
52
 
46
- export const ROUTE_AUTH_COGNITO_ID_TOKEN = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/cognito-id-token`;
53
+ export const ROUTE_AUTH_COGNITO_ID_TOKEN_V1 = `${ROUTE_2023_10_20_API_BASE_PATH}/embedded-wallet/cognito-id-token`;
54
+ export const ROUTE_AUTH_COGNITO_ID_TOKEN_V2 = `${ROUTE_2024_05_05_API_BASE_PATH}/login/web-token-exchange`;
55
+ export const ROUTE_AUTH_COGNITO_ID_TOKEN = ROUTE_AUTH_COGNITO_ID_TOKEN_V2;
@@ -1,20 +1,25 @@
1
1
  import { InvokeCommand, LambdaClient } from "@aws-sdk/client-lambda";
2
- import { fromCognitoIdentityPool } from "@aws-sdk/credential-providers";
2
+ import {
3
+ fromCognitoIdentity,
4
+ fromCognitoIdentityPool,
5
+ } from "@aws-sdk/credential-providers";
3
6
  import type { ThirdwebClient } from "../../../../../client/client.js";
4
7
  import { stringToBytes } from "../../../../../utils/encoding/to-bytes.js";
5
8
  import { authFetchEmbeddedWalletUser } from "../api/fetchers.js";
6
9
  import {
7
10
  AWS_REGION,
8
11
  COGNITO_IDENTITY_POOL_ID,
9
- GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION,
10
- ROUTE_AUTH_COGNITO_ID_TOKEN,
12
+ GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V1,
13
+ GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2,
14
+ ROUTE_AUTH_COGNITO_ID_TOKEN_V1,
15
+ ROUTE_AUTH_COGNITO_ID_TOKEN_V2,
11
16
  ROUTE_COGNITO_IDENTITY_POOL_URL,
12
17
  } from "../constants.js";
13
18
 
14
- export async function getCognitoRecoveryPassword(client: ThirdwebClient) {
19
+ export async function getCognitoRecoveryPasswordV1(client: ThirdwebClient) {
15
20
  const idTokenResponse = await authFetchEmbeddedWalletUser(
16
21
  client,
17
- ROUTE_AUTH_COGNITO_ID_TOKEN,
22
+ ROUTE_AUTH_COGNITO_ID_TOKEN_V1,
18
23
  {
19
24
  method: "GET",
20
25
  },
@@ -48,10 +53,8 @@ export async function getCognitoRecoveryPassword(client: ThirdwebClient) {
48
53
  credentials: credentials,
49
54
  });
50
55
 
51
- const functionName = GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION;
52
-
53
56
  const params = {
54
- FunctionName: functionName,
57
+ FunctionName: GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V1,
55
58
  Payload: stringToBytes(
56
59
  JSON.stringify({
57
60
  accessToken,
@@ -69,3 +72,67 @@ export async function getCognitoRecoveryPassword(client: ThirdwebClient) {
69
72
 
70
73
  return result;
71
74
  }
75
+
76
+ export async function getCognitoRecoveryPasswordV2(client: ThirdwebClient) {
77
+ const idTokenResponse = await authFetchEmbeddedWalletUser(
78
+ client,
79
+ ROUTE_AUTH_COGNITO_ID_TOKEN_V2,
80
+ {
81
+ method: "GET",
82
+ },
83
+ );
84
+ if (!idTokenResponse.ok) {
85
+ throw new Error(
86
+ `Failed to fetch id token from Cognito: ${JSON.stringify(
87
+ await idTokenResponse.json(),
88
+ null,
89
+ 2,
90
+ )}`,
91
+ );
92
+ }
93
+ const idTokenResult = await idTokenResponse.json();
94
+ const { token, identityId, lambdaToken } = idTokenResult;
95
+
96
+ const cognitoIdentity = fromCognitoIdentity({
97
+ clientConfig: {
98
+ region: AWS_REGION,
99
+ },
100
+ identityId,
101
+ logins: {
102
+ "cognito-identity.amazonaws.com": token,
103
+ },
104
+ });
105
+
106
+ // ? Figure out how to potentially route things through API Gateway
107
+ const lambdaClient = new LambdaClient({
108
+ region: AWS_REGION,
109
+ credentials: cognitoIdentity,
110
+ });
111
+
112
+ const params = {
113
+ FunctionName: GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2,
114
+ Payload: stringToBytes(
115
+ JSON.stringify({
116
+ token: lambdaToken,
117
+ }),
118
+ ),
119
+ };
120
+
121
+ const data = await lambdaClient.send(new InvokeCommand(params));
122
+
123
+ if (!data.Payload) {
124
+ throw new Error("No payload");
125
+ }
126
+ const encKeyResult = JSON.parse(data.Payload.transformToString());
127
+
128
+ if (encKeyResult.statusCode !== 200) {
129
+ throw new Error(
130
+ "Failed to get recovery code",
131
+ JSON.parse(encKeyResult.body).message,
132
+ );
133
+ }
134
+
135
+ return (JSON.parse(encKeyResult.body) as { recoveryShareEncKey: string })
136
+ .recoveryShareEncKey;
137
+ }
138
+ export const getCognitoRecoveryPassword = getCognitoRecoveryPasswordV2;
@@ -109,6 +109,7 @@ export class InAppNativeConnector implements InAppConnector {
109
109
  }
110
110
  case "google":
111
111
  case "facebook":
112
+ case "discord":
112
113
  case "apple": {
113
114
  const ExpoLinking = require("expo-linking");
114
115
  const redirectUrl =
@@ -0,0 +1 @@
1
+ export const DEFAULT_POP_UP_SIZE = "width=350, height=500";
@@ -0,0 +1,92 @@
1
+ import type { ThirdwebClient } from "../../../../../client/client.js";
2
+ import { getThirdwebBaseUrl } from "../../../../../utils/domains.js";
3
+ import type { AuthStoredTokenWithCookieReturnType } from "../../../../../wallets/in-app/core/authentication/type.js";
4
+ import { getDiscordLoginPath } from "../../../core/authentication/getLoginPath.js";
5
+ import type { Ecosystem } from "../../types.js";
6
+ import { DEFAULT_POP_UP_SIZE } from "./constants.js";
7
+ import { closeWindow } from "./utils.js";
8
+
9
+ export async function loginWithDiscord(options: {
10
+ client: ThirdwebClient;
11
+ ecosystem?: Ecosystem;
12
+ openedWindow?: Window | null | undefined;
13
+ closeOpenedWindow?: ((openedWindow: Window) => void) | undefined;
14
+ }): Promise<AuthStoredTokenWithCookieReturnType> {
15
+ let win = options.openedWindow;
16
+ let isWindowOpenedByFn = false;
17
+ if (!win) {
18
+ win = window.open(
19
+ getDiscordLoginPath(options.client, options.ecosystem),
20
+ "Login to discord",
21
+ DEFAULT_POP_UP_SIZE,
22
+ );
23
+ isWindowOpenedByFn = true;
24
+ }
25
+ if (!win) {
26
+ throw new Error("Something went wrong opening pop-up");
27
+ }
28
+
29
+ const result = await new Promise<AuthStoredTokenWithCookieReturnType>(
30
+ (resolve, reject) => {
31
+ // detect when the user closes the login window
32
+ const pollTimer = window.setInterval(async () => {
33
+ if (!win) {
34
+ return;
35
+ }
36
+ if (win.closed) {
37
+ clearInterval(pollTimer);
38
+ window.removeEventListener("message", messageListener);
39
+ reject(new Error("User closed login window"));
40
+ }
41
+ }, 1000);
42
+
43
+ const messageListener = async (
44
+ event: MessageEvent<{
45
+ eventType: string;
46
+ authResult?: AuthStoredTokenWithCookieReturnType;
47
+ errorString?: string;
48
+ }>,
49
+ ) => {
50
+ if (event.origin !== getThirdwebBaseUrl("inAppWallet")) {
51
+ return;
52
+ }
53
+ if (typeof event.data !== "object") {
54
+ reject(new Error("Invalid event data"));
55
+ return;
56
+ }
57
+
58
+ switch (event.data.eventType) {
59
+ case "oauthSuccessResult": {
60
+ window.removeEventListener("message", messageListener);
61
+ clearInterval(pollTimer);
62
+ closeWindow({
63
+ isWindowOpenedByFn,
64
+ win,
65
+ closeOpenedWindow: options.closeOpenedWindow,
66
+ });
67
+ if (event.data.authResult) {
68
+ resolve(event.data.authResult);
69
+ }
70
+ break;
71
+ }
72
+ case "oauthFailureResult": {
73
+ window.removeEventListener("message", messageListener);
74
+ clearInterval(pollTimer);
75
+ closeWindow({
76
+ isWindowOpenedByFn,
77
+ win,
78
+ closeOpenedWindow: options.closeOpenedWindow,
79
+ });
80
+ reject(new Error(event.data.errorString));
81
+ break;
82
+ }
83
+ default: {
84
+ reject(new Error(`Invalid event type: ${event.data.eventType}`));
85
+ }
86
+ }
87
+ };
88
+ window.addEventListener("message", messageListener);
89
+ },
90
+ );
91
+ return result;
92
+ }
@@ -0,0 +1,19 @@
1
+ export const closeWindow = ({
2
+ isWindowOpenedByFn,
3
+ win,
4
+ closeOpenedWindow,
5
+ }: {
6
+ win?: Window | null;
7
+ isWindowOpenedByFn: boolean;
8
+ closeOpenedWindow?: (openedWindow: Window) => void;
9
+ }) => {
10
+ if (isWindowOpenedByFn) {
11
+ win?.close();
12
+ } else {
13
+ if (win && closeOpenedWindow) {
14
+ closeOpenedWindow(win);
15
+ } else if (win) {
16
+ win.close();
17
+ }
18
+ }
19
+ };
@@ -15,6 +15,7 @@ import {
15
15
  import type { InAppConnector } from "../../core/interfaces/connector.js";
16
16
  import type { InAppWalletConstructorType } from "../types.js";
17
17
  import { InAppWalletIframeCommunicator } from "../utils/iFrameCommunication/InAppWalletIframeCommunicator.js";
18
+ import { loginWithDiscord } from "./auth/discord.js";
18
19
  import { Auth, type AuthQuerierTypes } from "./auth/iframe-auth.js";
19
20
  import { loginWithPasskey, registerPasskey } from "./auth/passkeys.js";
20
21
  import { IFrameWallet } from "./in-app-account.js";
@@ -215,6 +216,16 @@ export class InAppWebConnector implements InAppConnector {
215
216
  });
216
217
  return this.auth.loginWithAuthToken(authToken);
217
218
  }
219
+ case "discord": {
220
+ const authToken = await loginWithDiscord({
221
+ client: this.wallet.client,
222
+ ecosystem: this.wallet.ecosystem,
223
+ closeOpenedWindow: args.closeOpenedWindow,
224
+ openedWindow: args.openedWindow,
225
+ });
226
+ return this.auth.loginWithAuthToken(authToken);
227
+ }
228
+
218
229
  default:
219
230
  assertUnreachable(strategy);
220
231
  }
@@ -19,7 +19,13 @@ export type AppMetadata = {
19
19
  logoUrl?: string;
20
20
  };
21
21
 
22
- export type SocialAuthOption = "google" | "apple" | "facebook";
22
+ export const socialAuthOptions = [
23
+ "google",
24
+ "apple",
25
+ "facebook",
26
+ "discord",
27
+ ] as const;
28
+ export type SocialAuthOption = (typeof socialAuthOptions)[number];
23
29
 
24
30
  export type AuthOption = "email" | "phone" | "passkey" | SocialAuthOption;
25
31