thirdweb 5.98.1 → 5.99.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 (200) hide show
  1. package/dist/cjs/exports/react.js +11 -8
  2. package/dist/cjs/exports/react.js.map +1 -1
  3. package/dist/cjs/exports/react.native.js +11 -8
  4. package/dist/cjs/exports/react.native.js.map +1 -1
  5. package/dist/cjs/exports/wallets/eip5792.js +7 -3
  6. package/dist/cjs/exports/wallets/eip5792.js.map +1 -1
  7. package/dist/cjs/extensions/erc20/read/getCurrencyMetadata.js +2 -2
  8. package/dist/cjs/extensions/erc20/read/getCurrencyMetadata.js.map +1 -1
  9. package/dist/cjs/react/core/hooks/wallets/useCapabilities.js +5 -6
  10. package/dist/cjs/react/core/hooks/wallets/useCapabilities.js.map +1 -1
  11. package/dist/cjs/react/core/hooks/wallets/useSendAndConfirmCalls.js +99 -0
  12. package/dist/cjs/react/core/hooks/wallets/useSendAndConfirmCalls.js.map +1 -0
  13. package/dist/cjs/react/core/hooks/wallets/useSendCalls.js +32 -40
  14. package/dist/cjs/react/core/hooks/wallets/useSendCalls.js.map +1 -1
  15. package/dist/cjs/react/core/hooks/wallets/useWaitForCallsReceipt.js +38 -0
  16. package/dist/cjs/react/core/hooks/wallets/useWaitForCallsReceipt.js.map +1 -0
  17. package/dist/cjs/react/core/providers/thirdweb-provider.js +4 -3
  18. package/dist/cjs/react/core/providers/thirdweb-provider.js.map +1 -1
  19. package/dist/cjs/react/native/ui/connect/ConnectButton.js +4 -1
  20. package/dist/cjs/react/native/ui/connect/ConnectButton.js.map +1 -1
  21. package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js +6 -4
  22. package/dist/cjs/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
  23. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +1 -1
  24. package/dist/cjs/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
  25. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js +5 -15
  26. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js.map +1 -1
  27. package/dist/cjs/react/web/ui/PayEmbed.js +8 -1
  28. package/dist/cjs/react/web/ui/PayEmbed.js.map +1 -1
  29. package/dist/cjs/version.js +1 -1
  30. package/dist/cjs/wallets/coinbase/coinbase-web.js +2 -85
  31. package/dist/cjs/wallets/coinbase/coinbase-web.js.map +1 -1
  32. package/dist/cjs/wallets/connection/autoConnectCore.js +29 -12
  33. package/dist/cjs/wallets/connection/autoConnectCore.js.map +1 -1
  34. package/dist/cjs/wallets/eip5792/get-calls-status.js +54 -15
  35. package/dist/cjs/wallets/eip5792/get-calls-status.js.map +1 -1
  36. package/dist/cjs/wallets/eip5792/get-capabilities.js +21 -8
  37. package/dist/cjs/wallets/eip5792/get-capabilities.js.map +1 -1
  38. package/dist/cjs/wallets/eip5792/send-and-confirm-calls.js +41 -0
  39. package/dist/cjs/wallets/eip5792/send-and-confirm-calls.js.map +1 -0
  40. package/dist/cjs/wallets/eip5792/send-calls.js +27 -14
  41. package/dist/cjs/wallets/eip5792/send-calls.js.map +1 -1
  42. package/dist/cjs/wallets/eip5792/show-calls-status.js +8 -7
  43. package/dist/cjs/wallets/eip5792/show-calls-status.js.map +1 -1
  44. package/dist/cjs/wallets/eip5792/{wait-for-bundle.js → wait-for-calls-receipt.js} +23 -10
  45. package/dist/cjs/wallets/eip5792/wait-for-calls-receipt.js.map +1 -0
  46. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-calls.js +15 -10
  47. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-calls.js.map +1 -1
  48. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js +13 -3
  49. package/dist/cjs/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js.map +1 -1
  50. package/dist/cjs/wallets/in-app/core/wallet/is-in-app-signer.js +15 -0
  51. package/dist/cjs/wallets/in-app/core/wallet/is-in-app-signer.js.map +1 -0
  52. package/dist/cjs/wallets/smart/lib/smart-wallet-capabilities.js +4 -2
  53. package/dist/cjs/wallets/smart/lib/smart-wallet-capabilities.js.map +1 -1
  54. package/dist/esm/exports/react.js +5 -3
  55. package/dist/esm/exports/react.js.map +1 -1
  56. package/dist/esm/exports/react.native.js +5 -3
  57. package/dist/esm/exports/react.native.js.map +1 -1
  58. package/dist/esm/exports/wallets/eip5792.js +3 -1
  59. package/dist/esm/exports/wallets/eip5792.js.map +1 -1
  60. package/dist/esm/extensions/erc20/read/getCurrencyMetadata.js +2 -2
  61. package/dist/esm/extensions/erc20/read/getCurrencyMetadata.js.map +1 -1
  62. package/dist/esm/react/core/hooks/wallets/useCapabilities.js +5 -6
  63. package/dist/esm/react/core/hooks/wallets/useCapabilities.js.map +1 -1
  64. package/dist/esm/react/core/hooks/wallets/useSendAndConfirmCalls.js +96 -0
  65. package/dist/esm/react/core/hooks/wallets/useSendAndConfirmCalls.js.map +1 -0
  66. package/dist/esm/react/core/hooks/wallets/useSendCalls.js +32 -40
  67. package/dist/esm/react/core/hooks/wallets/useSendCalls.js.map +1 -1
  68. package/dist/esm/react/core/hooks/wallets/useWaitForCallsReceipt.js +35 -0
  69. package/dist/esm/react/core/hooks/wallets/useWaitForCallsReceipt.js.map +1 -0
  70. package/dist/esm/react/core/providers/thirdweb-provider.js +4 -3
  71. package/dist/esm/react/core/providers/thirdweb-provider.js.map +1 -1
  72. package/dist/esm/react/native/ui/connect/ConnectButton.js +4 -1
  73. package/dist/esm/react/native/ui/connect/ConnectButton.js.map +1 -1
  74. package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js +6 -4
  75. package/dist/esm/react/web/ui/ConnectWallet/ConnectButton.js.map +1 -1
  76. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js +1 -1
  77. package/dist/esm/react/web/ui/ConnectWallet/Modal/ConnectEmbed.js.map +1 -1
  78. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js +1 -11
  79. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js.map +1 -1
  80. package/dist/esm/react/web/ui/PayEmbed.js +8 -1
  81. package/dist/esm/react/web/ui/PayEmbed.js.map +1 -1
  82. package/dist/esm/version.js +1 -1
  83. package/dist/esm/wallets/coinbase/coinbase-web.js +2 -81
  84. package/dist/esm/wallets/coinbase/coinbase-web.js.map +1 -1
  85. package/dist/esm/wallets/connection/autoConnectCore.js +29 -12
  86. package/dist/esm/wallets/connection/autoConnectCore.js.map +1 -1
  87. package/dist/esm/wallets/eip5792/get-calls-status.js +54 -15
  88. package/dist/esm/wallets/eip5792/get-calls-status.js.map +1 -1
  89. package/dist/esm/wallets/eip5792/get-capabilities.js +22 -9
  90. package/dist/esm/wallets/eip5792/get-capabilities.js.map +1 -1
  91. package/dist/esm/wallets/eip5792/send-and-confirm-calls.js +38 -0
  92. package/dist/esm/wallets/eip5792/send-and-confirm-calls.js.map +1 -0
  93. package/dist/esm/wallets/eip5792/send-calls.js +28 -15
  94. package/dist/esm/wallets/eip5792/send-calls.js.map +1 -1
  95. package/dist/esm/wallets/eip5792/show-calls-status.js +9 -8
  96. package/dist/esm/wallets/eip5792/show-calls-status.js.map +1 -1
  97. package/dist/esm/wallets/eip5792/{wait-for-bundle.js → wait-for-calls-receipt.js} +22 -9
  98. package/dist/esm/wallets/eip5792/wait-for-calls-receipt.js.map +1 -0
  99. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-calls.js +15 -10
  100. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-calls.js.map +1 -1
  101. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js +13 -3
  102. package/dist/esm/wallets/in-app/core/eip5972/in-app-wallet-capabilities.js.map +1 -1
  103. package/dist/esm/wallets/in-app/core/wallet/is-in-app-signer.js +12 -0
  104. package/dist/esm/wallets/in-app/core/wallet/is-in-app-signer.js.map +1 -0
  105. package/dist/esm/wallets/smart/lib/smart-wallet-capabilities.js +4 -2
  106. package/dist/esm/wallets/smart/lib/smart-wallet-capabilities.js.map +1 -1
  107. package/dist/types/exports/react.d.ts +4 -3
  108. package/dist/types/exports/react.d.ts.map +1 -1
  109. package/dist/types/exports/react.native.d.ts +4 -3
  110. package/dist/types/exports/react.native.d.ts.map +1 -1
  111. package/dist/types/exports/wallets/eip5792.d.ts +3 -1
  112. package/dist/types/exports/wallets/eip5792.d.ts.map +1 -1
  113. package/dist/types/react/core/hooks/wallets/useCapabilities.d.ts +1 -0
  114. package/dist/types/react/core/hooks/wallets/useCapabilities.d.ts.map +1 -1
  115. package/dist/types/react/core/hooks/wallets/useSendAndConfirmCalls.d.ts +66 -0
  116. package/dist/types/react/core/hooks/wallets/useSendAndConfirmCalls.d.ts.map +1 -0
  117. package/dist/types/react/core/hooks/wallets/useSendCalls.d.ts +8 -11
  118. package/dist/types/react/core/hooks/wallets/useSendCalls.d.ts.map +1 -1
  119. package/dist/types/react/core/hooks/wallets/useWaitForCallsReceipt.d.ts +32 -0
  120. package/dist/types/react/core/hooks/wallets/useWaitForCallsReceipt.d.ts.map +1 -0
  121. package/dist/types/react/core/providers/thirdweb-provider.d.ts.map +1 -1
  122. package/dist/types/react/native/ui/connect/ConnectButton.d.ts.map +1 -1
  123. package/dist/types/react/web/ui/ConnectWallet/ConnectButton.d.ts.map +1 -1
  124. package/dist/types/react/web/ui/ConnectWallet/Modal/ConnectEmbed.d.ts.map +1 -1
  125. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.d.ts.map +1 -1
  126. package/dist/types/react/web/ui/PayEmbed.d.ts +1 -1
  127. package/dist/types/react/web/ui/PayEmbed.d.ts.map +1 -1
  128. package/dist/types/version.d.ts +1 -1
  129. package/dist/types/wallets/coinbase/coinbase-web.d.ts +2 -30
  130. package/dist/types/wallets/coinbase/coinbase-web.d.ts.map +1 -1
  131. package/dist/types/wallets/connection/autoConnectCore.d.ts.map +1 -1
  132. package/dist/types/wallets/connection/types.d.ts +9 -0
  133. package/dist/types/wallets/connection/types.d.ts.map +1 -1
  134. package/dist/types/wallets/eip5792/get-calls-status.d.ts +5 -6
  135. package/dist/types/wallets/eip5792/get-calls-status.d.ts.map +1 -1
  136. package/dist/types/wallets/eip5792/get-capabilities.d.ts +2 -1
  137. package/dist/types/wallets/eip5792/get-capabilities.d.ts.map +1 -1
  138. package/dist/types/wallets/eip5792/send-and-confirm-calls.d.ts +39 -0
  139. package/dist/types/wallets/eip5792/send-and-confirm-calls.d.ts.map +1 -0
  140. package/dist/types/wallets/eip5792/send-calls.d.ts +12 -5
  141. package/dist/types/wallets/eip5792/send-calls.d.ts.map +1 -1
  142. package/dist/types/wallets/eip5792/show-calls-status.d.ts +2 -2
  143. package/dist/types/wallets/eip5792/show-calls-status.d.ts.map +1 -1
  144. package/dist/types/wallets/eip5792/types.d.ts +33 -4
  145. package/dist/types/wallets/eip5792/types.d.ts.map +1 -1
  146. package/dist/types/wallets/eip5792/{wait-for-bundle.d.ts → wait-for-calls-receipt.d.ts} +21 -9
  147. package/dist/types/wallets/eip5792/wait-for-calls-receipt.d.ts.map +1 -0
  148. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-calls.d.ts +3 -3
  149. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-calls.d.ts.map +1 -1
  150. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-capabilities.d.ts +3 -3
  151. package/dist/types/wallets/in-app/core/eip5972/in-app-wallet-capabilities.d.ts.map +1 -1
  152. package/dist/types/wallets/in-app/core/wallet/is-in-app-signer.d.ts +6 -0
  153. package/dist/types/wallets/in-app/core/wallet/is-in-app-signer.d.ts.map +1 -0
  154. package/dist/types/wallets/smart/lib/smart-wallet-capabilities.d.ts +2 -2
  155. package/dist/types/wallets/smart/lib/smart-wallet-capabilities.d.ts.map +1 -1
  156. package/package.json +1 -1
  157. package/src/exports/react.native.ts +6 -3
  158. package/src/exports/react.ts +6 -3
  159. package/src/exports/wallets/eip5792.ts +5 -3
  160. package/src/extensions/erc20/read/getCurrencyMetadata.ts +2 -2
  161. package/src/react/core/hooks/wallets/useCapabilities.ts +6 -6
  162. package/src/react/core/hooks/wallets/useSendAndConfirmCalls.ts +114 -0
  163. package/src/react/core/hooks/wallets/useSendCalls.ts +33 -50
  164. package/src/react/core/hooks/wallets/useWaitForCallsReceipt.ts +43 -0
  165. package/src/react/core/providers/thirdweb-provider.tsx +4 -3
  166. package/src/react/native/ui/connect/ConnectButton.tsx +4 -1
  167. package/src/react/web/ui/ConnectWallet/ConnectButton.tsx +11 -3
  168. package/src/react/web/ui/ConnectWallet/Modal/ConnectEmbed.tsx +1 -0
  169. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.tsx +1 -21
  170. package/src/react/web/ui/PayEmbed.tsx +15 -1
  171. package/src/version.ts +1 -1
  172. package/src/wallets/coinbase/coinbase-web.ts +6 -117
  173. package/src/wallets/connection/autoConnectCore.ts +33 -12
  174. package/src/wallets/connection/types.ts +10 -0
  175. package/src/wallets/eip5792/get-calls-status.test.ts +27 -33
  176. package/src/wallets/eip5792/get-calls-status.ts +68 -19
  177. package/src/wallets/eip5792/get-capabilities.test.ts +10 -10
  178. package/src/wallets/eip5792/get-capabilities.ts +33 -11
  179. package/src/wallets/eip5792/send-and-confirm-calls.ts +48 -0
  180. package/src/wallets/eip5792/send-calls.test.ts +7 -7
  181. package/src/wallets/eip5792/send-calls.ts +43 -21
  182. package/src/wallets/eip5792/show-calls-status.test.ts +3 -3
  183. package/src/wallets/eip5792/show-calls-status.ts +13 -12
  184. package/src/wallets/eip5792/types.ts +43 -4
  185. package/src/wallets/eip5792/{wait-for-bundle.test.ts → wait-for-calls-receipt.test.ts} +19 -9
  186. package/src/wallets/eip5792/{wait-for-bundle.ts → wait-for-calls-receipt.ts} +26 -16
  187. package/src/wallets/in-app/core/eip5972/in-app-wallet-calls.ts +17 -16
  188. package/src/wallets/in-app/core/eip5972/in-app-wallet-capabilities.ts +14 -3
  189. package/src/wallets/in-app/core/wallet/is-in-app-signer.ts +21 -0
  190. package/src/wallets/smart/lib/smart-wallet-capabilities.ts +5 -2
  191. package/dist/cjs/react/core/hooks/wallets/useCallsStatus.js +0 -41
  192. package/dist/cjs/react/core/hooks/wallets/useCallsStatus.js.map +0 -1
  193. package/dist/cjs/wallets/eip5792/wait-for-bundle.js.map +0 -1
  194. package/dist/esm/react/core/hooks/wallets/useCallsStatus.js +0 -38
  195. package/dist/esm/react/core/hooks/wallets/useCallsStatus.js.map +0 -1
  196. package/dist/esm/wallets/eip5792/wait-for-bundle.js.map +0 -1
  197. package/dist/types/react/core/hooks/wallets/useCallsStatus.d.ts +0 -26
  198. package/dist/types/react/core/hooks/wallets/useCallsStatus.d.ts.map +0 -1
  199. package/dist/types/wallets/eip5792/wait-for-bundle.d.ts.map +0 -1
  200. package/src/react/core/hooks/wallets/useCallsStatus.ts +0 -48
@@ -297,6 +297,9 @@ export function ConnectButton(props: ConnectButtonProps) {
297
297
  );
298
298
  const localeQuery = useConnectLocale(props.locale || "en_US");
299
299
  const connectionManager = useConnectionManager();
300
+ const activeAccount = useActiveAccount();
301
+ const activeWallet = useActiveWallet();
302
+ const siweAuth = useSiweAuth(activeWallet, activeAccount, props.auth);
300
303
 
301
304
  usePreloadWalletProviders({
302
305
  wallets,
@@ -337,6 +340,7 @@ export function ConnectButton(props: ConnectButtonProps) {
337
340
  }
338
341
  accountAbstraction={props.accountAbstraction}
339
342
  onConnect={props.onConnect}
343
+ siweAuth={siweAuth}
340
344
  />
341
345
  );
342
346
 
@@ -362,7 +366,11 @@ export function ConnectButton(props: ConnectButtonProps) {
362
366
 
363
367
  return (
364
368
  <WalletUIStatesProvider theme={props.theme} isOpen={false}>
365
- <ConnectButtonInner {...props} connectLocale={localeQuery.data} />
369
+ <ConnectButtonInner
370
+ {...props}
371
+ siweAuth={siweAuth}
372
+ connectLocale={localeQuery.data}
373
+ />
366
374
  <ConnectModal
367
375
  shouldSetActive={true}
368
376
  accountAbstraction={props.accountAbstraction}
@@ -396,11 +404,11 @@ export function ConnectButton(props: ConnectButtonProps) {
396
404
  function ConnectButtonInner(
397
405
  props: ConnectButtonProps & {
398
406
  connectLocale: ConnectLocale;
407
+ siweAuth: ReturnType<typeof useSiweAuth>;
399
408
  },
400
409
  ) {
401
- const activeWallet = useActiveWallet();
410
+ const siweAuth = props.siweAuth;
402
411
  const activeAccount = useActiveAccount();
403
- const siweAuth = useSiweAuth(activeWallet, activeAccount, props.auth);
404
412
  const [showSignatureModal, setShowSignatureModal] = useState(false);
405
413
 
406
414
  // if wallet gets disconnected suddently, close the signature modal if it's open
@@ -247,6 +247,7 @@ export function ConnectEmbed(props: ConnectEmbedProps) {
247
247
  chain={preferredChain}
248
248
  appMetadata={props.appMetadata}
249
249
  client={props.client}
250
+ siweAuth={siweAuth}
250
251
  wallets={wallets}
251
252
  accountAbstraction={props.accountAbstraction}
252
253
  timeout={
@@ -23,10 +23,7 @@ import { sendTransaction } from "../../../../../../../transaction/actions/send-t
23
23
  import type { WaitForReceiptOptions } from "../../../../../../../transaction/actions/wait-for-tx-receipt.js";
24
24
  import { waitForReceipt } from "../../../../../../../transaction/actions/wait-for-tx-receipt.js";
25
25
  import { formatNumber } from "../../../../../../../utils/formatNumber.js";
26
- import { isEcosystemWallet } from "../../../../../../../wallets/ecosystem/is-ecosystem-wallet.js";
27
- import { isInAppWallet } from "../../../../../../../wallets/in-app/core/wallet/index.js";
28
- import type { Wallet } from "../../../../../../../wallets/interfaces/wallet.js";
29
- import { isSmartWallet } from "../../../../../../../wallets/smart/is-smart-wallet.js";
26
+ import { isInAppSigner } from "../../../../../../../wallets/in-app/core/wallet/is-in-app-signer.js";
30
27
  import { spacing } from "../../../../../../core/design-system/index.js";
31
28
  import { useChainName } from "../../../../../../core/hooks/others/useChainQuery.js";
32
29
  import { useBuyWithCryptoStatus } from "../../../../../../core/hooks/pay/useBuyWithCryptoStatus.js";
@@ -779,20 +776,3 @@ function useSwapMutation(props: {
779
776
  },
780
777
  });
781
778
  }
782
-
783
- function isInAppSigner(options: {
784
- wallet: Wallet;
785
- connectedWallets: Wallet[];
786
- }) {
787
- const isInAppOrEcosystem = (w: Wallet) =>
788
- isInAppWallet(w) || isEcosystemWallet(w);
789
- const isSmartWalletWithAdmin =
790
- isSmartWallet(options.wallet) &&
791
- options.connectedWallets.some(
792
- (w) =>
793
- isInAppOrEcosystem(w) &&
794
- w.getAccount()?.address?.toLowerCase() ===
795
- options.wallet.getAdminAccount?.()?.address?.toLowerCase(),
796
- );
797
- return isInAppOrEcosystem(options.wallet) || isSmartWalletWithAdmin;
798
- }
@@ -9,13 +9,19 @@ import type { AppMetadata } from "../../../wallets/types.js";
9
9
  import type { WalletId } from "../../../wallets/wallet-types.js";
10
10
  import { CustomThemeProvider } from "../../core/design-system/CustomThemeProvider.js";
11
11
  import type { Theme } from "../../core/design-system/index.js";
12
- import type { SiweAuthOptions } from "../../core/hooks/auth/useSiweAuth.js";
12
+ import {
13
+ type SiweAuthOptions,
14
+ useSiweAuth,
15
+ } from "../../core/hooks/auth/useSiweAuth.js";
13
16
  import type {
14
17
  ConnectButton_connectModalOptions,
15
18
  PayUIOptions,
16
19
  } from "../../core/hooks/connection/ConnectButtonProps.js";
20
+ import { useActiveAccount } from "../../core/hooks/wallets/useActiveAccount.js";
21
+ import { useActiveWallet } from "../../core/hooks/wallets/useActiveWallet.js";
17
22
  import { useConnectionManager } from "../../core/providers/connection-manager.js";
18
23
  import type { SupportedTokens } from "../../core/utils/defaultTokens.js";
24
+ import { AutoConnect } from "../../web/ui/AutoConnect/AutoConnect.js";
19
25
  import { EmbedContainer } from "./ConnectWallet/Modal/ConnectEmbed.js";
20
26
  import { useConnectLocale } from "./ConnectWallet/locale/getConnectLocale.js";
21
27
  import BuyScreen from "./ConnectWallet/screens/Buy/BuyScreen.js";
@@ -300,6 +306,13 @@ export function PayEmbed(props: PayEmbedProps) {
300
306
  const [screen, setScreen] = useState<"buy" | "execute-tx">("buy");
301
307
  const theme = props.theme || "dark";
302
308
  const connectionManager = useConnectionManager();
309
+ const activeAccount = useActiveAccount();
310
+ const activeWallet = useActiveWallet();
311
+ const siweAuth = useSiweAuth(
312
+ activeWallet,
313
+ activeAccount,
314
+ props.connectOptions?.auth,
315
+ );
303
316
 
304
317
  // Add props.chain and props.chains to defined chains store
305
318
  useEffect(() => {
@@ -342,6 +355,7 @@ export function PayEmbed(props: PayEmbedProps) {
342
355
  } else {
343
356
  content = (
344
357
  <>
358
+ <AutoConnect client={props.client} siweAuth={siweAuth} />
345
359
  {screen === "buy" && (
346
360
  <BuyScreen
347
361
  title={metadata?.name || "Buy"}
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = "5.98.1";
1
+ export const version = "5.99.0";
@@ -1,14 +1,8 @@
1
1
  import type { ProviderInterface } from "@coinbase/wallet-sdk";
2
+ import type { Preference } from "@coinbase/wallet-sdk/dist/core/provider/interface.js";
2
3
  import type { Address } from "abitype";
3
4
  import * as ox__Hex from "ox/Hex";
4
5
  import * as ox__TypedData from "ox/TypedData";
5
- import type { Account, Wallet } from "../interfaces/wallet.js";
6
- import type { SendTransactionOption } from "../interfaces/wallet.js";
7
- import type { AppMetadata, DisconnectFn, SwitchChainFn } from "../types.js";
8
- import { getValidPublicRPCUrl } from "../utils/chains.js";
9
- import { normalizeChainId } from "../utils/normalizeChainId.js";
10
-
11
- import type { Preference } from "@coinbase/wallet-sdk/dist/core/provider/interface.js";
12
6
  import { trackTransaction } from "../../analytics/track/transaction.js";
13
7
  import type { Chain } from "../../chains/types.js";
14
8
  import { getCachedChain, getChainMetadata } from "../../chains/utils.js";
@@ -22,14 +16,12 @@ import {
22
16
  } from "../../utils/encoding/hex.js";
23
17
  import { parseTypedData } from "../../utils/signatures/helpers/parse-typed-data.js";
24
18
  import { COINBASE } from "../constants.js";
25
- import type {
26
- GetCallsStatusResponse,
27
- WalletCapabilities,
28
- WalletCapabilitiesRecord,
29
- WalletSendCallsId,
30
- WalletSendCallsParameters,
31
- } from "../eip5792/types.js";
19
+ import type { Account, Wallet } from "../interfaces/wallet.js";
20
+ import type { SendTransactionOption } from "../interfaces/wallet.js";
21
+ import type { AppMetadata, DisconnectFn, SwitchChainFn } from "../types.js";
22
+ import { getValidPublicRPCUrl } from "../utils/chains.js";
32
23
  import { getDefaultAppMetadata } from "../utils/defaultDappMetadata.js";
24
+ import { normalizeChainId } from "../utils/normalizeChainId.js";
33
25
  import type { WalletEmitter } from "../wallet-emitter.js";
34
26
  import type {
35
27
  CreateWalletArgs,
@@ -171,109 +163,6 @@ export function isCoinbaseSDKWallet(
171
163
  return wallet.id === COINBASE;
172
164
  }
173
165
 
174
- /**
175
- * @internal
176
- */
177
- export async function coinbaseSDKWalletGetCapabilities(args: {
178
- wallet: Wallet<typeof COINBASE>;
179
- }) {
180
- const { wallet } = args;
181
-
182
- const account = wallet.getAccount();
183
- if (!account) {
184
- return {
185
- message: `Can't get capabilities, no account connected for wallet: ${wallet.id}`,
186
- };
187
- }
188
-
189
- const config = wallet.getConfig();
190
- const provider = await getCoinbaseWebProvider(config);
191
- try {
192
- return (await provider.request({
193
- method: "wallet_getCapabilities",
194
- params: [account.address],
195
- })) as WalletCapabilitiesRecord<WalletCapabilities, number>;
196
- } catch (error: unknown) {
197
- if (/unsupport|not support/i.test((error as Error).message)) {
198
- return {
199
- message: `${wallet.id} does not support wallet_getCapabilities, reach out to them directly to request EIP-5792 support.`,
200
- };
201
- }
202
- throw error;
203
- }
204
- }
205
-
206
- /**
207
- * @internal
208
- */
209
- export async function coinbaseSDKWalletSendCalls(args: {
210
- wallet: Wallet<typeof COINBASE>;
211
- params: WalletSendCallsParameters;
212
- }) {
213
- const { wallet, params } = args;
214
-
215
- const config = wallet.getConfig();
216
- const provider = await getCoinbaseWebProvider(config);
217
-
218
- try {
219
- return (await provider.request({
220
- method: "wallet_sendCalls",
221
- params,
222
- })) as WalletSendCallsId;
223
- } catch (error) {
224
- if (/unsupport|not support/i.test((error as Error).message)) {
225
- throw new Error(
226
- `${wallet.id} does not support wallet_sendCalls, reach out to them directly to request EIP-5792 support.`,
227
- );
228
- }
229
- throw error;
230
- }
231
- }
232
-
233
- /**
234
- * @internal
235
- */
236
- export async function coinbaseSDKWalletShowCallsStatus(args: {
237
- wallet: Wallet<typeof COINBASE>;
238
- bundleId: string;
239
- }) {
240
- const { wallet, bundleId } = args;
241
-
242
- const provider = await getCoinbaseWebProvider(wallet.getConfig());
243
-
244
- try {
245
- return await provider.request({
246
- method: "wallet_showCallsStatus",
247
- params: [bundleId],
248
- });
249
- } catch (error: unknown) {
250
- if (/unsupport|not support/i.test((error as Error).message)) {
251
- throw new Error(
252
- `${wallet.id} does not support wallet_showCallsStatus, reach out to them directly to request EIP-5792 support.`,
253
- );
254
- }
255
- throw error;
256
- }
257
- }
258
-
259
- /**
260
- * @internal
261
- */
262
- export async function coinbaseSDKWalletGetCallsStatus(args: {
263
- wallet: Wallet<typeof COINBASE>;
264
- bundleId: string;
265
- }) {
266
- const { wallet, bundleId } = args;
267
-
268
- const config = wallet.getConfig();
269
- const provider = await getCoinbaseWebProvider(config);
270
-
271
- return provider.request({
272
- method: "wallet_getCallsStatus",
273
- params: [bundleId],
274
- }) as Promise<GetCallsStatusResponse>;
275
- }
276
-
277
166
  function createAccount({
278
167
  provider,
279
168
  address,
@@ -8,6 +8,7 @@ import type {
8
8
  AuthArgsType,
9
9
  AuthStoredTokenWithCookieReturnType,
10
10
  } from "../in-app/core/authentication/types.js";
11
+ import { isInAppSigner } from "../in-app/core/wallet/is-in-app-signer.js";
11
12
  import { getUrlToken } from "../in-app/web/lib/get-url-token.js";
12
13
  import type { Wallet } from "../interfaces/wallet.js";
13
14
  import {
@@ -82,11 +83,11 @@ const _autoConnectCore = async ({
82
83
  getStoredActiveWalletId(storage),
83
84
  ]);
84
85
 
85
- const result = getUrlToken();
86
+ const urlToken = getUrlToken();
86
87
 
87
88
  // If an auth cookie is found and this site supports the wallet, we'll set the auth cookie in the client storage
88
- const wallet = wallets.find((w) => w.id === result?.walletId);
89
- if (result?.authCookie && wallet) {
89
+ const wallet = wallets.find((w) => w.id === urlToken?.walletId);
90
+ if (urlToken?.authCookie && wallet) {
90
91
  const clientStorage = new ClientScopedStorage({
91
92
  storage,
92
93
  clientId: props.client.clientId,
@@ -97,17 +98,17 @@ const _autoConnectCore = async ({
97
98
  }
98
99
  : undefined,
99
100
  });
100
- await clientStorage.saveAuthCookie(result.authCookie);
101
+ await clientStorage.saveAuthCookie(urlToken.authCookie);
101
102
  }
102
- if (result?.walletId) {
103
- lastActiveWalletId = result.walletId;
104
- lastConnectedWalletIds = lastConnectedWalletIds?.includes(result.walletId)
103
+ if (urlToken?.walletId) {
104
+ lastActiveWalletId = urlToken.walletId;
105
+ lastConnectedWalletIds = lastConnectedWalletIds?.includes(urlToken.walletId)
105
106
  ? lastConnectedWalletIds
106
- : [result.walletId, ...(lastConnectedWalletIds || [])];
107
+ : [urlToken.walletId, ...(lastConnectedWalletIds || [])];
107
108
  }
108
109
 
109
- if (result?.authProvider) {
110
- await setLastAuthProvider?.(result.authProvider, storage);
110
+ if (urlToken?.authProvider) {
111
+ await setLastAuthProvider?.(urlToken.authProvider, storage);
111
112
  }
112
113
 
113
114
  // if no wallets were last connected or we didn't receive an auth token
@@ -132,7 +133,7 @@ const _autoConnectCore = async ({
132
133
  wallet: activeWallet,
133
134
  client: props.client,
134
135
  lastConnectedChain,
135
- authResult: result?.authResult,
136
+ authResult: urlToken?.authResult,
136
137
  }),
137
138
  {
138
139
  ms: timeout,
@@ -183,13 +184,33 @@ const _autoConnectCore = async ({
183
184
  wallet,
184
185
  client: props.client,
185
186
  lastConnectedChain,
186
- authResult: result?.authResult,
187
+ authResult: urlToken?.authResult,
187
188
  });
188
189
  manager.addConnectedWallet(wallet);
189
190
  } catch {
190
191
  // no-op
191
192
  }
192
193
  }
194
+
195
+ // Auto-login with SIWE
196
+ const isIAW =
197
+ activeWallet &&
198
+ isInAppSigner({
199
+ wallet: activeWallet,
200
+ connectedWallets: activeWallet
201
+ ? [activeWallet, ...otherWallets]
202
+ : otherWallets,
203
+ });
204
+ if (
205
+ isIAW &&
206
+ props.siweAuth?.requiresAuth &&
207
+ !props.siweAuth?.isLoggedIn &&
208
+ !props.siweAuth?.isLoggingIn
209
+ ) {
210
+ await props.siweAuth?.doLogin().catch((err) => {
211
+ console.warn("Error signing in with SIWE:", err.message);
212
+ });
213
+ }
193
214
  manager.isAutoConnecting.setValue(false);
194
215
  return autoConnected; // useQuery needs a return value
195
216
  };
@@ -118,4 +118,14 @@ export type AutoConnectProps = {
118
118
  * Callback to be called when the connection is timeout-ed
119
119
  */
120
120
  onTimeout?: () => void;
121
+
122
+ /**
123
+ * @hidden
124
+ */
125
+ siweAuth?: {
126
+ requiresAuth: boolean;
127
+ doLogin: () => Promise<void>;
128
+ isLoggedIn: boolean | undefined;
129
+ isLoggingIn: boolean | undefined;
130
+ };
121
131
  };
@@ -89,7 +89,7 @@ describe.sequential("injected wallet", async () => {
89
89
  const promise = getCallsStatus({
90
90
  wallet: wallet,
91
91
  client: TEST_CLIENT,
92
- bundleId: "test",
92
+ id: "test",
93
93
  });
94
94
 
95
95
  await expect(promise).rejects.toMatchInlineSnapshot(
@@ -107,17 +107,23 @@ describe.sequential("injected wallet", async () => {
107
107
  const result = await getCallsStatus({
108
108
  wallet: wallet,
109
109
  client: TEST_CLIENT,
110
- bundleId: "test",
110
+ id: "test",
111
111
  });
112
112
 
113
113
  expect(mocks.injectedRequest).toHaveBeenCalledWith({
114
114
  method: "wallet_getCallsStatus",
115
115
  params: ["test"],
116
116
  });
117
- expect(result).toEqual({
118
- status: "CONFIRMED",
119
- receipts: [],
120
- });
117
+ expect(result).toMatchInlineSnapshot(`
118
+ {
119
+ "atomic": false,
120
+ "chainId": undefined,
121
+ "receipts": [],
122
+ "status": "success",
123
+ "statusCode": 200,
124
+ "version": "2.0.0",
125
+ }
126
+ `);
121
127
  });
122
128
 
123
129
  test("without support should fail", async () => {
@@ -127,7 +133,7 @@ describe.sequential("injected wallet", async () => {
127
133
  const promise = getCallsStatus({
128
134
  wallet: wallet,
129
135
  client: TEST_CLIENT,
130
- bundleId: "test",
136
+ id: "test",
131
137
  });
132
138
 
133
139
  await expect(promise).rejects.toMatchInlineSnapshot(
@@ -152,19 +158,15 @@ describe.sequential("in-app wallet", async () => {
152
158
  });
153
159
  wallet.getChain = vi.fn().mockReturnValue(ANVIL_CHAIN);
154
160
 
155
- const bundleId = await sendCalls({
161
+ const callResult = await sendCalls({
156
162
  wallet: wallet,
157
163
  ...SEND_CALLS_OPTIONS,
158
164
  });
159
165
 
160
- const result = await getCallsStatus({
161
- wallet: wallet,
162
- client: TEST_CLIENT,
163
- bundleId,
164
- });
166
+ const result = await getCallsStatus(callResult);
165
167
 
166
- expect(result.status).toEqual("CONFIRMED");
167
- expect(result.receipts.length).toEqual(2);
168
+ expect(result.status).toEqual("success");
169
+ expect(result.receipts?.length).toEqual(2);
168
170
  });
169
171
 
170
172
  test("with smart account", async () => {
@@ -177,19 +179,15 @@ describe.sequential("in-app wallet", async () => {
177
179
  sendBatchTransaction,
178
180
  });
179
181
 
180
- const bundleId = await sendCalls({
182
+ const callResult = await sendCalls({
181
183
  wallet: wallet,
182
184
  ...SEND_CALLS_OPTIONS,
183
185
  });
184
186
 
185
- const result = await getCallsStatus({
186
- wallet: wallet,
187
- client: TEST_CLIENT,
188
- bundleId,
189
- });
187
+ const result = await getCallsStatus(callResult);
190
188
 
191
- expect(result.status).toEqual("CONFIRMED");
192
- expect(result.receipts.length).toEqual(1);
189
+ expect(result.status).toEqual("success");
190
+ expect(result.receipts?.length).toEqual(1);
193
191
  });
194
192
 
195
193
  test("with pending transaction", async () => {
@@ -202,26 +200,22 @@ describe.sequential("in-app wallet", async () => {
202
200
  sendTransaction,
203
201
  });
204
202
 
205
- const bundleId = await sendCalls({
203
+ const callResult = await sendCalls({
206
204
  wallet: wallet,
207
205
  ...SEND_CALLS_OPTIONS,
208
206
  });
209
207
 
210
- const result = await getCallsStatus({
211
- wallet: wallet,
212
- client: TEST_CLIENT,
213
- bundleId,
214
- });
208
+ const result = await getCallsStatus(callResult);
215
209
 
216
- expect(result.status).toEqual("PENDING");
217
- expect(result.receipts.length).toEqual(0);
210
+ expect(result.status).toEqual("pending");
211
+ expect(result.receipts?.length).toEqual(0);
218
212
  });
219
213
 
220
214
  test("unknown bundle id should fail", async () => {
221
215
  const promise = getCallsStatus({
222
216
  wallet: wallet,
223
217
  client: TEST_CLIENT,
224
- bundleId: "unknown",
218
+ id: "unknown",
225
219
  });
226
220
 
227
221
  await expect(promise).rejects.toMatchInlineSnapshot(
@@ -235,7 +229,7 @@ describe.sequential("in-app wallet", async () => {
235
229
  const promise = getCallsStatus({
236
230
  wallet: wallet,
237
231
  client: TEST_CLIENT,
238
- bundleId: "test",
232
+ id: "test",
239
233
  });
240
234
 
241
235
  await expect(promise).rejects.toMatchInlineSnapshot(
@@ -1,16 +1,23 @@
1
1
  import type { ThirdwebClient } from "../../client/client.js";
2
+ import { hexToBigInt } from "../../utils/encoding/hex.js";
3
+ import { hexToNumber } from "../../utils/encoding/hex.js";
2
4
  import { isCoinbaseSDKWallet } from "../coinbase/coinbase-web.js";
3
5
  import { isInAppWallet } from "../in-app/core/wallet/index.js";
4
6
  import { getInjectedProvider } from "../injected/index.js";
7
+ import type { Ethereum } from "../interfaces/ethereum.js";
5
8
  import type { Wallet } from "../interfaces/wallet.js";
6
9
  import { isSmartWallet } from "../smart/index.js";
7
10
  import { isWalletConnect } from "../wallet-connect/controller.js";
8
- import type { GetCallsStatusResponse, WalletSendCallsId } from "./types.js";
11
+ import type {
12
+ GetCallsStatusRawResponse,
13
+ GetCallsStatusResponse,
14
+ WalletSendCallsId,
15
+ } from "./types.js";
9
16
 
10
17
  export type GetCallsStatusOptions = {
11
18
  wallet: Wallet;
12
19
  client: ThirdwebClient;
13
- bundleId: WalletSendCallsId;
20
+ id: WalletSendCallsId;
14
21
  };
15
22
 
16
23
  /**
@@ -32,20 +39,19 @@ export type GetCallsStatusOptions = {
32
39
  *
33
40
  * const client = createThirdwebClient({ clientId: ... });
34
41
  *
35
- * const bundleId = await sendCalls({ wallet, client, calls });
42
+ * const result = await sendCalls({ wallet, client, calls });
36
43
  *
37
44
  * let result;
38
- * while (result.status !== "CONFIRMED") {
39
- * result = await getCallsStatus({ wallet, client, bundleId });
45
+ * while (result.status !== "success") {
46
+ * result = await getCallsStatus(result);
40
47
  * }
41
48
  * ```
42
49
  * @extension EIP5792
43
- * @extension EIP5792
44
50
  */
45
51
  export async function getCallsStatus({
46
52
  wallet,
47
53
  client,
48
- bundleId,
54
+ id,
49
55
  }: GetCallsStatusOptions): Promise<GetCallsStatusResponse> {
50
56
  const account = wallet.getAccount();
51
57
  if (!account) {
@@ -59,27 +65,65 @@ export async function getCallsStatus({
59
65
  const { inAppWalletGetCallsStatus } = await import(
60
66
  "../in-app/core/eip5972/in-app-wallet-calls.js"
61
67
  );
62
- return inAppWalletGetCallsStatus({ wallet, client, bundleId });
68
+ return inAppWalletGetCallsStatus({ wallet, client, id });
69
+ }
70
+
71
+ if (isWalletConnect(wallet)) {
72
+ throw new Error("getCallsStatus is not yet supported for Wallet Connect");
63
73
  }
64
74
 
75
+ let provider: Ethereum;
65
76
  if (isCoinbaseSDKWallet(wallet)) {
66
- const { coinbaseSDKWalletGetCallsStatus } = await import(
77
+ const { getCoinbaseWebProvider } = await import(
67
78
  "../coinbase/coinbase-web.js"
68
79
  );
69
- return coinbaseSDKWalletGetCallsStatus({ wallet, bundleId });
80
+ const config = wallet.getConfig();
81
+ provider = (await getCoinbaseWebProvider(config)) as Ethereum;
82
+ } else {
83
+ provider = getInjectedProvider(wallet.id);
70
84
  }
71
85
 
72
- if (isWalletConnect(wallet)) {
73
- throw new Error("getCallsStatus is not yet supported for Wallet Connect");
74
- }
75
-
76
- // Default to injected wallet
77
- const provider = getInjectedProvider(wallet.id);
78
86
  try {
79
- return await provider.request({
87
+ const {
88
+ atomic = false,
89
+ chainId,
90
+ receipts,
91
+ version = "2.0.0",
92
+ ...response
93
+ } = (await provider.request({
80
94
  method: "wallet_getCallsStatus",
81
- params: [bundleId],
82
- });
95
+ params: [id],
96
+ })) as GetCallsStatusRawResponse;
97
+ const [status, statusCode] = (() => {
98
+ const statusCode = response.status;
99
+ if (statusCode >= 100 && statusCode < 200)
100
+ return ["pending", statusCode] as const;
101
+ if (statusCode >= 200 && statusCode < 300)
102
+ return ["success", statusCode] as const;
103
+ if (statusCode >= 300 && statusCode < 700)
104
+ return ["failure", statusCode] as const;
105
+ // @ts-expect-error: for backwards compatibility
106
+ if (statusCode === "CONFIRMED") return ["success", 200] as const;
107
+ // @ts-expect-error: for backwards compatibility
108
+ if (statusCode === "PENDING") return ["pending", 100] as const;
109
+ return [undefined, statusCode];
110
+ })();
111
+ return {
112
+ ...response,
113
+ atomic,
114
+ // @ts-expect-error: for backwards compatibility
115
+ chainId: chainId ? hexToNumber(chainId) : undefined,
116
+ receipts:
117
+ receipts?.map((receipt) => ({
118
+ ...receipt,
119
+ blockNumber: hexToBigInt(receipt.blockNumber),
120
+ gasUsed: hexToBigInt(receipt.gasUsed),
121
+ status: receiptStatuses[receipt.status as "0x0" | "0x1"],
122
+ })) ?? [],
123
+ statusCode,
124
+ status,
125
+ version,
126
+ };
83
127
  } catch (error) {
84
128
  if (/unsupport|not support/i.test((error as Error).message)) {
85
129
  throw new Error(
@@ -89,3 +133,8 @@ export async function getCallsStatus({
89
133
  throw error;
90
134
  }
91
135
  }
136
+
137
+ const receiptStatuses = {
138
+ "0x0": "reverted",
139
+ "0x1": "success",
140
+ } as const;