thirdweb 5.100.0-nightly-713ebe0a2d6d8a409e41ce0f0317fc34b1f221bb-20250520000414 → 5.100.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 (223) hide show
  1. package/dist/cjs/bridge/Buy.js +1 -1
  2. package/dist/cjs/bridge/Onramp.js +152 -0
  3. package/dist/cjs/bridge/Onramp.js.map +1 -0
  4. package/dist/cjs/bridge/OnrampStatus.js +78 -0
  5. package/dist/cjs/bridge/OnrampStatus.js.map +1 -0
  6. package/dist/cjs/bridge/Sell.js +1 -1
  7. package/dist/cjs/bridge/index.js +2 -1
  8. package/dist/cjs/bridge/index.js.map +1 -1
  9. package/dist/cjs/{react/web/ui/ConnectWallet/screens/Buy/pay-transactions/useBuyTransactionsToShow.js → bridge/types/BridgeAction.js} +1 -1
  10. package/dist/cjs/bridge/types/BridgeAction.js.map +1 -0
  11. package/dist/cjs/extensions/ens/resolve-l2-name.js +0 -2
  12. package/dist/cjs/extensions/ens/resolve-l2-name.js.map +1 -1
  13. package/dist/cjs/pay/buyWithFiat/getQuote.js +129 -33
  14. package/dist/cjs/pay/buyWithFiat/getQuote.js.map +1 -1
  15. package/dist/cjs/pay/buyWithFiat/getStatus.js +71 -20
  16. package/dist/cjs/pay/buyWithFiat/getStatus.js.map +1 -1
  17. package/dist/cjs/pay/utils/commonTypes.js +1 -1
  18. package/dist/cjs/pay/utils/commonTypes.js.map +1 -1
  19. package/dist/cjs/pay/utils/definitions.js +1 -13
  20. package/dist/cjs/pay/utils/definitions.js.map +1 -1
  21. package/dist/cjs/react/core/hooks/pay/useBuyWithFiatStatus.js +1 -3
  22. package/dist/cjs/react/core/hooks/pay/useBuyWithFiatStatus.js.map +1 -1
  23. package/dist/cjs/react/core/hooks/transaction/useSendTransaction.js +42 -38
  24. package/dist/cjs/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  25. package/dist/cjs/react/core/utils/wallet.js +15 -0
  26. package/dist/cjs/react/core/utils/wallet.js.map +1 -1
  27. package/dist/cjs/react/web/hooks/transaction/useSendTransaction.js +1 -1
  28. package/dist/cjs/react/web/hooks/transaction/useSendTransaction.js.map +1 -1
  29. package/dist/cjs/react/web/ui/ConnectWallet/TransactionsScreen.js +0 -9
  30. package/dist/cjs/react/web/ui/ConnectWallet/TransactionsScreen.js.map +1 -1
  31. package/dist/cjs/react/web/ui/ConnectWallet/locale/en.js +1 -1
  32. package/dist/cjs/react/web/ui/ConnectWallet/locale/en.js.map +1 -1
  33. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.js +0 -177
  34. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.js.map +1 -1
  35. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js +2 -10
  36. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js.map +1 -1
  37. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.js +5 -8
  38. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.js.map +1 -1
  39. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.js +0 -15
  40. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.js.map +1 -1
  41. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.js +0 -60
  42. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.js.map +1 -1
  43. package/dist/cjs/react/web/ui/TransactionButton/DepositScreen.js +133 -0
  44. package/dist/cjs/react/web/ui/TransactionButton/DepositScreen.js.map +1 -0
  45. package/dist/cjs/react/web/ui/TransactionButton/ExecutingScreen.js +4 -3
  46. package/dist/cjs/react/web/ui/TransactionButton/ExecutingScreen.js.map +1 -1
  47. package/dist/cjs/react/web/ui/TransactionButton/TransactionModal.js +9 -1
  48. package/dist/cjs/react/web/ui/TransactionButton/TransactionModal.js.map +1 -1
  49. package/dist/cjs/version.js +1 -1
  50. package/dist/cjs/version.js.map +1 -1
  51. package/dist/esm/bridge/Buy.js +1 -1
  52. package/dist/esm/bridge/Onramp.js +147 -0
  53. package/dist/esm/bridge/Onramp.js.map +1 -0
  54. package/dist/esm/bridge/OnrampStatus.js +75 -0
  55. package/dist/esm/bridge/OnrampStatus.js.map +1 -0
  56. package/dist/esm/bridge/Sell.js +1 -1
  57. package/dist/esm/bridge/index.js +1 -0
  58. package/dist/esm/bridge/index.js.map +1 -1
  59. package/dist/esm/bridge/types/BridgeAction.js +2 -0
  60. package/dist/esm/bridge/types/BridgeAction.js.map +1 -0
  61. package/dist/esm/extensions/ens/resolve-l2-name.js +0 -2
  62. package/dist/esm/extensions/ens/resolve-l2-name.js.map +1 -1
  63. package/dist/esm/pay/buyWithFiat/getQuote.js +129 -33
  64. package/dist/esm/pay/buyWithFiat/getQuote.js.map +1 -1
  65. package/dist/esm/pay/buyWithFiat/getStatus.js +71 -20
  66. package/dist/esm/pay/buyWithFiat/getStatus.js.map +1 -1
  67. package/dist/esm/pay/utils/commonTypes.js +1 -1
  68. package/dist/esm/pay/utils/commonTypes.js.map +1 -1
  69. package/dist/esm/pay/utils/definitions.js +0 -10
  70. package/dist/esm/pay/utils/definitions.js.map +1 -1
  71. package/dist/esm/react/core/hooks/pay/useBuyWithFiatStatus.js +1 -3
  72. package/dist/esm/react/core/hooks/pay/useBuyWithFiatStatus.js.map +1 -1
  73. package/dist/esm/react/core/hooks/transaction/useSendTransaction.js +42 -38
  74. package/dist/esm/react/core/hooks/transaction/useSendTransaction.js.map +1 -1
  75. package/dist/esm/react/core/utils/wallet.js +15 -0
  76. package/dist/esm/react/core/utils/wallet.js.map +1 -1
  77. package/dist/esm/react/web/hooks/transaction/useSendTransaction.js +1 -1
  78. package/dist/esm/react/web/hooks/transaction/useSendTransaction.js.map +1 -1
  79. package/dist/esm/react/web/ui/ConnectWallet/TransactionsScreen.js +0 -9
  80. package/dist/esm/react/web/ui/ConnectWallet/TransactionsScreen.js.map +1 -1
  81. package/dist/esm/react/web/ui/ConnectWallet/locale/en.js +1 -1
  82. package/dist/esm/react/web/ui/ConnectWallet/locale/en.js.map +1 -1
  83. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.js +4 -180
  84. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.js.map +1 -1
  85. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js +2 -10
  86. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.js.map +1 -1
  87. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.js +5 -8
  88. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.js.map +1 -1
  89. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.js +2 -16
  90. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.js.map +1 -1
  91. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.js +0 -59
  92. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.js.map +1 -1
  93. package/dist/esm/react/web/ui/TransactionButton/DepositScreen.js +130 -0
  94. package/dist/esm/react/web/ui/TransactionButton/DepositScreen.js.map +1 -0
  95. package/dist/esm/react/web/ui/TransactionButton/ExecutingScreen.js +4 -3
  96. package/dist/esm/react/web/ui/TransactionButton/ExecutingScreen.js.map +1 -1
  97. package/dist/esm/react/web/ui/TransactionButton/TransactionModal.js +9 -1
  98. package/dist/esm/react/web/ui/TransactionButton/TransactionModal.js.map +1 -1
  99. package/dist/esm/version.js +1 -1
  100. package/dist/esm/version.js.map +1 -1
  101. package/dist/types/bridge/Buy.d.ts +1 -1
  102. package/dist/types/bridge/Onramp.d.ts +123 -0
  103. package/dist/types/bridge/Onramp.d.ts.map +1 -0
  104. package/dist/types/bridge/OnrampStatus.d.ts +108 -0
  105. package/dist/types/bridge/OnrampStatus.d.ts.map +1 -0
  106. package/dist/types/bridge/Sell.d.ts +1 -1
  107. package/dist/types/bridge/index.d.ts +6 -3
  108. package/dist/types/bridge/index.d.ts.map +1 -1
  109. package/dist/types/bridge/types/BridgeAction.d.ts +2 -0
  110. package/dist/types/bridge/types/BridgeAction.d.ts.map +1 -0
  111. package/dist/types/bridge/types/Quote.d.ts +3 -65
  112. package/dist/types/bridge/types/Quote.d.ts.map +1 -1
  113. package/dist/types/bridge/types/Route.d.ts +35 -0
  114. package/dist/types/bridge/types/Route.d.ts.map +1 -1
  115. package/dist/types/bridge/types/Token.d.ts +1 -0
  116. package/dist/types/bridge/types/Token.d.ts.map +1 -1
  117. package/dist/types/extensions/ens/resolve-l2-name.d.ts.map +1 -1
  118. package/dist/types/pay/buyWithFiat/getQuote.d.ts.map +1 -1
  119. package/dist/types/pay/buyWithFiat/getStatus.d.ts +1 -12
  120. package/dist/types/pay/buyWithFiat/getStatus.d.ts.map +1 -1
  121. package/dist/types/pay/utils/commonTypes.d.ts +1 -1
  122. package/dist/types/pay/utils/commonTypes.d.ts.map +1 -1
  123. package/dist/types/pay/utils/definitions.d.ts +0 -10
  124. package/dist/types/pay/utils/definitions.d.ts.map +1 -1
  125. package/dist/types/react/core/hooks/pay/useBuyWithFiatStatus.d.ts.map +1 -1
  126. package/dist/types/react/core/hooks/transaction/useSendTransaction.d.ts +1 -0
  127. package/dist/types/react/core/hooks/transaction/useSendTransaction.d.ts.map +1 -1
  128. package/dist/types/react/core/utils/wallet.d.ts.map +1 -1
  129. package/dist/types/react/web/hooks/transaction/useSendTransaction.d.ts.map +1 -1
  130. package/dist/types/react/web/ui/ConnectWallet/TransactionsScreen.d.ts.map +1 -1
  131. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.d.ts +1 -30
  132. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.d.ts.map +1 -1
  133. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/main/types.d.ts +2 -0
  134. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/main/types.d.ts.map +1 -1
  135. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.d.ts +2 -0
  136. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.d.ts.map +1 -1
  137. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.d.ts +0 -5
  138. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.d.ts.map +1 -1
  139. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.d.ts +1 -3
  140. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.d.ts.map +1 -1
  141. package/dist/types/react/web/ui/TransactionButton/DepositScreen.d.ts +15 -0
  142. package/dist/types/react/web/ui/TransactionButton/DepositScreen.d.ts.map +1 -0
  143. package/dist/types/react/web/ui/TransactionButton/ExecutingScreen.d.ts.map +1 -1
  144. package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts +1 -0
  145. package/dist/types/react/web/ui/TransactionButton/TransactionModal.d.ts.map +1 -1
  146. package/dist/types/version.d.ts +1 -1
  147. package/dist/types/version.d.ts.map +1 -1
  148. package/package.json +15 -15
  149. package/src/bridge/Buy.ts +1 -1
  150. package/src/bridge/Onramp.test.ts +118 -0
  151. package/src/bridge/Onramp.ts +244 -0
  152. package/src/bridge/OnrampStatus.ts +133 -0
  153. package/src/bridge/Sell.ts +1 -1
  154. package/src/bridge/index.ts +11 -3
  155. package/src/bridge/types/BridgeAction.ts +1 -0
  156. package/src/bridge/types/Quote.ts +3 -65
  157. package/src/bridge/types/Route.ts +39 -0
  158. package/src/bridge/types/Token.ts +1 -0
  159. package/src/extensions/ens/resolve-l2-name.ts +0 -2
  160. package/src/pay/buyWithFiat/getQuote.ts +184 -33
  161. package/src/pay/buyWithFiat/getStatus.ts +101 -42
  162. package/src/pay/convert/cryptoToFiat.test.ts +7 -5
  163. package/src/pay/convert/fiatToCrypto.test.ts +6 -4
  164. package/src/pay/utils/commonTypes.ts +1 -1
  165. package/src/pay/utils/definitions.ts +0 -14
  166. package/src/react/core/hooks/pay/useBuyWithFiatStatus.ts +0 -2
  167. package/src/react/core/hooks/transaction/useSendTransaction.ts +48 -41
  168. package/src/react/core/utils/wallet.ts +15 -0
  169. package/src/react/web/hooks/transaction/useSendTransaction.tsx +1 -0
  170. package/src/react/web/ui/ConnectWallet/TransactionsScreen.tsx +0 -53
  171. package/src/react/web/ui/ConnectWallet/locale/en.ts +1 -1
  172. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatSteps.tsx +3 -510
  173. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/OnRampScreen.tsx +2 -12
  174. package/src/react/web/ui/ConnectWallet/screens/Buy/main/types.ts +2 -0
  175. package/src/react/web/ui/ConnectWallet/screens/Buy/main/useBuyTxStates.ts +19 -20
  176. package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/SwapDetailsScreen.tsx +1 -37
  177. package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.test.ts +1 -95
  178. package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/statusMeta.ts +0 -69
  179. package/src/react/web/ui/TransactionButton/DepositScreen.tsx +295 -0
  180. package/src/react/web/ui/TransactionButton/ExecutingScreen.tsx +4 -3
  181. package/src/react/web/ui/TransactionButton/TransactionModal.tsx +20 -1
  182. package/src/version.ts +1 -1
  183. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatTxDetailsTable.js +0 -37
  184. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatTxDetailsTable.js.map +0 -1
  185. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwap.js +0 -86
  186. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwap.js.map +0 -1
  187. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwapFlow.js +0 -25
  188. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwapFlow.js.map +0 -1
  189. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.js +0 -81
  190. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.js.map +0 -1
  191. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TxDetailsScreen.js +0 -17
  192. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TxDetailsScreen.js.map +0 -1
  193. package/dist/cjs/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/useBuyTransactionsToShow.js.map +0 -1
  194. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatTxDetailsTable.js +0 -34
  195. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatTxDetailsTable.js.map +0 -1
  196. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwap.js +0 -83
  197. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwap.js.map +0 -1
  198. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwapFlow.js +0 -22
  199. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwapFlow.js.map +0 -1
  200. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.js +0 -78
  201. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.js.map +0 -1
  202. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TxDetailsScreen.js +0 -14
  203. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TxDetailsScreen.js.map +0 -1
  204. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/useBuyTransactionsToShow.js +0 -2
  205. package/dist/esm/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/useBuyTransactionsToShow.js.map +0 -1
  206. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatTxDetailsTable.d.ts +0 -26
  207. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatTxDetailsTable.d.ts.map +0 -1
  208. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwap.d.ts +0 -16
  209. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwap.d.ts.map +0 -1
  210. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwapFlow.d.ts +0 -23
  211. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwapFlow.d.ts.map +0 -1
  212. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.d.ts +0 -14
  213. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.d.ts.map +0 -1
  214. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TxDetailsScreen.d.ts +0 -14
  215. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TxDetailsScreen.d.ts.map +0 -1
  216. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/useBuyTransactionsToShow.d.ts +0 -10
  217. package/dist/types/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/useBuyTransactionsToShow.d.ts.map +0 -1
  218. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/FiatTxDetailsTable.tsx +0 -142
  219. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwap.tsx +0 -170
  220. package/src/react/web/ui/ConnectWallet/screens/Buy/fiat/PostOnRampSwapFlow.tsx +0 -63
  221. package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/FiatDetailsScreen.tsx +0 -138
  222. package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/TxDetailsScreen.tsx +0 -45
  223. package/src/react/web/ui/ConnectWallet/screens/Buy/pay-transactions/useBuyTransactionsToShow.ts +0 -12
@@ -1,519 +1,15 @@
1
- import {
2
- Cross1Icon,
3
- ExternalLinkIcon,
4
- TriangleDownIcon,
5
- } from "@radix-ui/react-icons";
6
- import { useMemo } from "react";
7
- import { getCachedChain } from "../../../../../../../chains/utils.js";
8
- import type { ThirdwebClient } from "../../../../../../../client/client.js";
9
- import { NATIVE_TOKEN_ADDRESS } from "../../../../../../../constants/addresses.js";
10
- import type { BuyWithFiatStatus } from "../../../../../../../pay/buyWithFiat/getStatus.js";
11
- import { formatNumber } from "../../../../../../../utils/formatNumber.js";
12
- import { formatExplorerTxUrl } from "../../../../../../../utils/url.js";
1
+ import { Cross1Icon } from "@radix-ui/react-icons";
13
2
  import {
14
3
  type Theme,
15
- fontSize,
16
4
  iconSize,
17
5
  radius,
18
6
  spacing,
19
7
  } from "../../../../../../core/design-system/index.js";
20
- import {
21
- useChainExplorers,
22
- useChainName,
23
- } from "../../../../../../core/hooks/others/useChainQuery.js";
24
- import type { TokenInfo } from "../../../../../../core/utils/defaultTokens.js";
25
- import { Spacer } from "../../../../components/Spacer.js";
26
8
  import { Spinner } from "../../../../components/Spinner.js";
27
- import { Container, Line, ModalHeader } from "../../../../components/basic.js";
28
- import { Button, ButtonLink } from "../../../../components/buttons.js";
9
+ import { Container } from "../../../../components/basic.js";
29
10
  import { Text } from "../../../../components/text.js";
30
- import { TokenSymbol } from "../../../../components/token/TokenSymbol.js";
31
- import { type ERC20OrNativeToken, NATIVE_TOKEN } from "../../nativeToken.js";
32
- import { PayTokenIcon } from "../PayTokenIcon.js";
33
11
  import { StepIcon } from "../Stepper.js";
34
- import {
35
- type FiatStatusMeta,
36
- getBuyWithFiatStatusMeta,
37
- } from "../pay-transactions/statusMeta.js";
38
- import { getCurrencyMeta, getFiatIcon } from "./currencies.js";
39
-
40
- export type BuyWithFiatPartialQuote = {
41
- fromCurrencySymbol: string;
42
- fromCurrencyAmount: string;
43
- onRampTokenAmount: string;
44
- toTokenAmount: string;
45
- onRampToken: {
46
- tokenAddress: string;
47
- name?: string;
48
- symbol?: string;
49
- chainId: number;
50
- };
51
-
52
- toToken: {
53
- tokenAddress: string;
54
- name?: string;
55
- symbol?: string;
56
- chainId: number;
57
- };
58
- };
59
-
60
- export function FiatSteps(props: {
61
- title: string;
62
- partialQuote: BuyWithFiatPartialQuote;
63
- status?: BuyWithFiatStatus;
64
- onBack: () => void;
65
- client: ThirdwebClient;
66
- step: number;
67
- onContinue: () => void;
68
- }) {
69
- const statusMeta = props.status
70
- ? getBuyWithFiatStatusMeta(props.status)
71
- : undefined;
72
-
73
- const {
74
- toToken: toTokenMeta,
75
- onRampToken: onRampTokenMeta,
76
- onRampTokenAmount,
77
- fromCurrencySymbol,
78
- fromCurrencyAmount,
79
- toTokenAmount,
80
- } = props.partialQuote;
81
-
82
- const currency = getCurrencyMeta(fromCurrencySymbol);
83
- const isPartialSuccess = statusMeta?.progressStatus === "partialSuccess";
84
-
85
- const toChain = useMemo(
86
- () => getCachedChain(toTokenMeta.chainId),
87
- [toTokenMeta.chainId],
88
- );
89
-
90
- const destinationChain = useMemo(() => {
91
- if (props.status?.status !== "NOT_FOUND" && props.status?.destination) {
92
- return getCachedChain(props.status?.destination.token.chainId);
93
- }
94
-
95
- return undefined;
96
- }, [props.status]);
97
-
98
- const toToken: ERC20OrNativeToken = useMemo(() => {
99
- if (toTokenMeta.tokenAddress === NATIVE_TOKEN_ADDRESS) {
100
- return NATIVE_TOKEN;
101
- }
102
-
103
- const tokenInfo: TokenInfo = {
104
- address: toTokenMeta.tokenAddress,
105
- name: toTokenMeta.name || "",
106
- symbol: toTokenMeta.symbol || "",
107
- // TODO: when icon is available in endpoint
108
- // icon: toTokenMeta.icon
109
- };
110
- return tokenInfo;
111
- }, [toTokenMeta]);
112
-
113
- const onRampChain = useMemo(
114
- () => getCachedChain(onRampTokenMeta.chainId),
115
- [onRampTokenMeta.chainId],
116
- );
117
-
118
- const onRampToken: ERC20OrNativeToken = useMemo(() => {
119
- if (onRampTokenMeta.tokenAddress === NATIVE_TOKEN_ADDRESS) {
120
- return NATIVE_TOKEN;
121
- }
122
-
123
- const tokenInfo: TokenInfo = {
124
- address: onRampTokenMeta.tokenAddress,
125
- name: onRampTokenMeta.name || "",
126
- symbol: onRampTokenMeta.symbol || "",
127
- // TODO: when icon is available in endpoint
128
- // icon: onRampTokenMeta.icon,
129
- };
130
- return tokenInfo;
131
- }, [onRampTokenMeta]);
132
-
133
- const onRampName = useChainName(onRampChain);
134
- const onRampExplorers = useChainExplorers(onRampChain);
135
- const toChainName = useChainName(toChain);
136
- const toChainExplorers = useChainExplorers(toChain);
137
- const destinationName = useChainName(destinationChain);
138
-
139
- const onRampTokenInfo = (
140
- <div>
141
- <Text color="primaryText" size="sm">
142
- {formatNumber(Number(onRampTokenAmount), 6)}{" "}
143
- <TokenSymbol token={onRampToken} chain={onRampChain} size="sm" inline />
144
- </Text>
145
- </div>
146
- );
147
-
148
- const fiatIcon = getFiatIcon(currency, "sm");
149
-
150
- const onRampTokenIcon = (
151
- <PayTokenIcon
152
- token={onRampToken}
153
- chain={onRampChain}
154
- size="sm"
155
- client={props.client}
156
- />
157
- );
158
-
159
- const toTokenIcon = (
160
- <PayTokenIcon
161
- token={toToken}
162
- chain={toChain}
163
- size="sm"
164
- client={props.client}
165
- />
166
- );
167
-
168
- const onRampChainInfo = <Text size="xs">{onRampName.name}</Text>;
169
-
170
- const partialSuccessToTokenInfo =
171
- props.status?.status === "CRYPTO_SWAP_FALLBACK" &&
172
- props.status.destination ? (
173
- <div>
174
- <Text
175
- color="secondaryText"
176
- size="sm"
177
- inline
178
- style={{
179
- textDecoration: "line-through",
180
- }}
181
- >
182
- {formatNumber(Number(toTokenAmount), 6)}{" "}
183
- <TokenSymbol
184
- token={toToken}
185
- chain={toChain}
186
- size="sm"
187
- inline
188
- color="secondaryText"
189
- />
190
- </Text>{" "}
191
- <Text color="danger" size="sm" inline>
192
- {formatNumber(Number(props.status.destination.amount), 6)}{" "}
193
- <TokenSymbol
194
- token={{
195
- address: props.status.destination.token.tokenAddress,
196
- name: props.status.destination.token.name || "",
197
- symbol: props.status.destination.token.symbol || "",
198
- }}
199
- chain={toChain}
200
- size="sm"
201
- inline
202
- color="danger"
203
- />
204
- </Text>
205
- </div>
206
- ) : null;
207
-
208
- const toTokenInfo = partialSuccessToTokenInfo || (
209
- <Text color="primaryText" size="sm">
210
- {formatNumber(Number(toTokenAmount), 6)}{" "}
211
- <TokenSymbol token={toToken} chain={toChain} size="sm" inline />
212
- </Text>
213
- );
214
-
215
- const partialSuccessToChainInfo =
216
- props.status?.status === "CRYPTO_SWAP_FALLBACK" &&
217
- props.status.destination &&
218
- props.status.destination.token.chainId !==
219
- props.status.quote.toToken.chainId ? (
220
- <div>
221
- <Text
222
- size="xs"
223
- inline
224
- style={{
225
- textDecoration: "line-through",
226
- }}
227
- >
228
- {toChainName.name}
229
- </Text>{" "}
230
- <Text size="xs" inline>
231
- {destinationName.name}
232
- </Text>
233
- </div>
234
- ) : null;
235
-
236
- const toTokehChainInfo = partialSuccessToChainInfo || (
237
- <Text size="xs">{toChainName.name}</Text>
238
- );
239
-
240
- const onRampTxHash =
241
- props.status?.status !== "NOT_FOUND"
242
- ? props.status?.source?.transactionHash
243
- : undefined;
244
-
245
- const toTokenTxHash =
246
- props.status?.status !== "NOT_FOUND"
247
- ? props.status?.destination?.transactionHash
248
- : undefined;
249
-
250
- const showContinueBtn =
251
- !props.status ||
252
- props.status.status === "CRYPTO_SWAP_REQUIRED" ||
253
- props.status.status === "CRYPTO_SWAP_FAILED";
254
-
255
- function getStep1State(): FiatStatusMeta["progressStatus"] {
256
- if (!statusMeta) {
257
- if (props.step === 2) {
258
- return "completed";
259
- }
260
- return "actionRequired";
261
- }
262
-
263
- if (statusMeta.step === 2) {
264
- return "completed";
265
- }
266
-
267
- return statusMeta.progressStatus;
268
- }
269
-
270
- function getStep2State(): FiatStatusMeta["progressStatus"] | undefined {
271
- if (!statusMeta) {
272
- if (props.step === 2) {
273
- return "actionRequired";
274
- }
275
- return undefined;
276
- }
277
-
278
- if (statusMeta.step === 2) {
279
- return statusMeta.progressStatus;
280
- }
281
-
282
- return undefined;
283
- }
284
-
285
- return (
286
- <Container p="lg">
287
- <ModalHeader title={props.title} onBack={props.onBack} />
288
- <Spacer y="lg" />
289
-
290
- {/* Step 1 */}
291
- <PaymentStep
292
- title={
293
- <Text color="primaryText" size="md">
294
- Get{" "}
295
- <TokenSymbol
296
- token={onRampToken}
297
- chain={onRampChain}
298
- size="md"
299
- inline
300
- />{" "}
301
- with {props.partialQuote.fromCurrencySymbol}
302
- </Text>
303
- }
304
- step={1}
305
- from={{
306
- icon: fiatIcon,
307
- primaryText: (
308
- <Text color="primaryText" size="sm">
309
- {formatNumber(Number(fromCurrencyAmount), 6)} {fromCurrencySymbol}
310
- </Text>
311
- ),
312
- }}
313
- to={{
314
- icon: onRampTokenIcon,
315
- primaryText: onRampTokenInfo,
316
- secondaryText: onRampChainInfo,
317
- }}
318
- state={getStep1State()}
319
- explorer={
320
- onRampExplorers.explorers[0]?.url && onRampTxHash
321
- ? {
322
- label: "View on Explorer",
323
- url: formatExplorerTxUrl(
324
- onRampExplorers.explorers[0]?.url,
325
- onRampTxHash,
326
- ),
327
- }
328
- : undefined
329
- }
330
- />
331
-
332
- <Spacer y="md" />
333
-
334
- <PaymentStep
335
- title={
336
- <Text color="primaryText" size="md">
337
- Convert{" "}
338
- <TokenSymbol
339
- token={onRampToken}
340
- chain={onRampChain}
341
- size="md"
342
- inline
343
- />{" "}
344
- to <TokenSymbol token={toToken} chain={toChain} size="md" inline />
345
- </Text>
346
- }
347
- step={2}
348
- from={{
349
- icon: onRampTokenIcon,
350
- primaryText: onRampTokenInfo,
351
- secondaryText: onRampChainInfo,
352
- }}
353
- to={{
354
- icon: toTokenIcon,
355
- primaryText: toTokenInfo,
356
- secondaryText: toTokehChainInfo,
357
- }}
358
- state={getStep2State()}
359
- explorer={
360
- toChainExplorers.explorers[0]?.url && toTokenTxHash
361
- ? {
362
- label: "View on Explorer",
363
- url: formatExplorerTxUrl(
364
- toChainExplorers.explorers[0]?.url,
365
- toTokenTxHash,
366
- ),
367
- }
368
- : undefined
369
- }
370
- />
371
-
372
- {isPartialSuccess &&
373
- props.status &&
374
- props.status.status !== "NOT_FOUND" &&
375
- props.status.source &&
376
- props.status.destination && (
377
- <>
378
- <Spacer y="md" />
379
- <Text color="danger" size="sm" center>
380
- Expected {props.status.source?.token.symbol}, Got{" "}
381
- {props.status.destination?.token.symbol} instead
382
- </Text>
383
- <Spacer y="sm" />
384
- </>
385
- )}
386
-
387
- {showContinueBtn && (
388
- <>
389
- <Spacer y="md" />
390
- <Button variant="accent" onClick={props.onContinue} fullWidth>
391
- Continue
392
- </Button>
393
- </>
394
- )}
395
- </Container>
396
- );
397
- }
398
-
399
- function PaymentStep(props: {
400
- step: number;
401
- title: React.ReactNode;
402
- state?: FiatStatusMeta["progressStatus"];
403
- from: {
404
- icon: React.ReactNode;
405
- primaryText: React.ReactNode;
406
- secondaryText?: React.ReactNode;
407
- };
408
- to: {
409
- icon: React.ReactNode;
410
- primaryText: React.ReactNode;
411
- secondaryText?: React.ReactNode;
412
- };
413
- iconText?: string;
414
- explorer?: {
415
- label: string;
416
- url: string;
417
- };
418
- }) {
419
- return (
420
- <StepContainer state={props.state}>
421
- <Text size="sm">Step {props.step}</Text>
422
- <Spacer y="sm" />
423
- {props.title}
424
- <Spacer y="sm" />
425
- <Line />
426
- <Spacer y="md" />
427
-
428
- <PaymentSubStep {...props.from} />
429
-
430
- <Container
431
- color="borderColor"
432
- style={{
433
- paddingLeft: "18px",
434
- position: "relative",
435
- marginBlock: "3px",
436
- }}
437
- >
438
- {/* TODO - replace this with SVG */}
439
- <div
440
- style={{
441
- height: "18px",
442
- width: "2px",
443
- backgroundColor: "currentColor",
444
- transform: "translateX(-50%)",
445
- }}
446
- />
447
- <TriangleDownIcon
448
- width={iconSize.sm}
449
- height={iconSize.sm}
450
- style={{
451
- position: "absolute",
452
- bottom: "0",
453
- transform: "translate(-50%, 50%)",
454
- }}
455
- />
456
- </Container>
457
-
458
- <PaymentSubStep {...props.to} />
459
-
460
- {props.explorer && (
461
- <>
462
- <Spacer y="md" />
463
- <ButtonLink
464
- variant="outline"
465
- fullWidth
466
- href={props.explorer.url}
467
- style={{
468
- fontSize: fontSize.xs,
469
- padding: spacing.xs,
470
- }}
471
- gap="xxs"
472
- target="_blank"
473
- >
474
- {props.explorer.label}
475
- <ExternalLinkIcon width={iconSize.xs} height={iconSize.xs} />
476
- </ButtonLink>
477
- </>
478
- )}
479
- </StepContainer>
480
- );
481
- }
482
-
483
- function PaymentSubStep(props: {
484
- icon: React.ReactNode;
485
- primaryText: React.ReactNode;
486
- secondaryText?: React.ReactNode;
487
- }) {
488
- return (
489
- <Container
490
- flex="row"
491
- gap="sm"
492
- center="y"
493
- style={{
494
- flexWrap: "nowrap",
495
- }}
496
- >
497
- {/* icon */}
498
- <Container
499
- p="xs"
500
- borderColor="borderColor"
501
- flex="row"
502
- center="both"
503
- style={{
504
- borderStyle: "solid",
505
- borderWidth: "1.5px",
506
- borderRadius: radius.lg,
507
- }}
508
- >
509
- {props.icon}
510
- </Container>
511
- <Container flex="column" gap="xxs">
512
- {props.primaryText} {props.secondaryText}
513
- </Container>
514
- </Container>
515
- );
516
- }
12
+ import type { FiatStatusMeta } from "../pay-transactions/statusMeta.js";
517
13
 
518
14
  export function StepContainer(props: {
519
15
  state?: FiatStatusMeta["progressStatus"];
@@ -535,9 +31,6 @@ export function StepContainer(props: {
535
31
  } else if (props.state === "failed") {
536
32
  color = "danger";
537
33
  text = "Failed";
538
- } else if (props.state === "partialSuccess") {
539
- color = "danger";
540
- text = "Incomplete";
541
34
  }
542
35
 
543
36
  return (
@@ -496,19 +496,12 @@ function useOnRampStatus(props: {
496
496
 
497
497
  switch (statusQuery.data?.status) {
498
498
  case "ON_RAMP_TRANSFER_COMPLETED":
499
- case "CRYPTO_SWAP_COMPLETED":
500
- case "CRYPTO_SWAP_REQUIRED":
501
499
  uiStatus = "completed";
502
500
  break;
503
- case "CRYPTO_SWAP_FALLBACK":
504
- uiStatus = "partialSuccess";
505
- break;
506
- case "ON_RAMP_TRANSFER_FAILED":
507
501
  case "PAYMENT_FAILED":
508
502
  uiStatus = "failed";
509
503
  break;
510
504
  case "PENDING_PAYMENT":
511
- case "ON_RAMP_TRANSFER_IN_PROGRESS":
512
505
  uiStatus = "pending";
513
506
  break;
514
507
  default:
@@ -522,10 +515,7 @@ function useOnRampStatus(props: {
522
515
  return;
523
516
  }
524
517
 
525
- if (
526
- statusQuery.data &&
527
- (uiStatus === "completed" || uiStatus === "partialSuccess")
528
- ) {
518
+ if (statusQuery.data && uiStatus === "completed") {
529
519
  purchaseCbCalled.current = true;
530
520
  props.onSuccess(statusQuery.data);
531
521
  }
@@ -537,7 +527,7 @@ function useOnRampStatus(props: {
537
527
  return;
538
528
  }
539
529
 
540
- if (uiStatus === "completed" || uiStatus === "partialSuccess") {
530
+ if (uiStatus === "completed") {
541
531
  try {
542
532
  if (props.openedWindow && !props.openedWindow.closed) {
543
533
  props.openedWindow.close();
@@ -1,3 +1,4 @@
1
+ import type { ChainMetadata } from "../../../../../../../chains/types.js";
1
2
  import type { BuyWithCryptoQuote } from "../../../../../../../pay/buyWithCrypto/getQuote.js";
2
3
  import type { BuyWithFiatQuote } from "../../../../../../../pay/buyWithFiat/getQuote.js";
3
4
  import type { GetWalletBalanceResult } from "../../../../../../../wallets/utils/getWalletBalance.js";
@@ -9,6 +10,7 @@ export type TransactionCostAndData = {
9
10
  walletBalance: GetWalletBalanceResult;
10
11
  transactionValueWei: bigint;
11
12
  gasCostWei: bigint;
13
+ chainMetadata: ChainMetadata;
12
14
  };
13
15
 
14
16
  export type SelectedScreen =
@@ -18,6 +18,7 @@ export function useTransactionCostAndData(args: {
18
18
  transaction: PreparedTransaction;
19
19
  account: Account | undefined;
20
20
  supportedDestinations: SupportedChainAndTokens;
21
+ refetchIntervalMs?: number;
21
22
  }) {
22
23
  const { transaction, account, supportedDestinations } = args;
23
24
  // Compute query key of the transaction first
@@ -62,22 +63,24 @@ export function useTransactionCostAndData(args: {
62
63
 
63
64
  const erc20Value = await resolvePromisedValue(transaction.erc20Value);
64
65
  if (erc20Value) {
65
- const [tokenBalance, tokenMeta, gasCostWei] = await Promise.all([
66
- getWalletBalance({
67
- address: account.address,
68
- chain: transaction.chain,
69
- client: transaction.client,
70
- tokenAddress: erc20Value.tokenAddress,
71
- }),
72
- getCurrencyMetadata({
73
- contract: getContract({
74
- address: erc20Value.tokenAddress,
66
+ const [tokenBalance, tokenMeta, gasCostWei, chainMetadata] =
67
+ await Promise.all([
68
+ getWalletBalance({
69
+ address: account.address,
75
70
  chain: transaction.chain,
76
71
  client: transaction.client,
72
+ tokenAddress: erc20Value.tokenAddress,
77
73
  }),
78
- }),
79
- getTransactionGasCost(transaction, account?.address),
80
- ]);
74
+ getCurrencyMetadata({
75
+ contract: getContract({
76
+ address: erc20Value.tokenAddress,
77
+ chain: transaction.chain,
78
+ client: transaction.client,
79
+ }),
80
+ }),
81
+ getTransactionGasCost(transaction, account?.address),
82
+ getChainMetadata(transaction.chain),
83
+ ]);
81
84
  const transactionValueWei = erc20Value.amountWei;
82
85
  const walletBalance = tokenBalance;
83
86
  const currency = {
@@ -95,6 +98,7 @@ export function useTransactionCostAndData(args: {
95
98
  return {
96
99
  token: currency,
97
100
  decimals: tokenMeta.decimals,
101
+ chainMetadata,
98
102
  walletBalance,
99
103
  gasCostWei,
100
104
  transactionValueWei,
@@ -121,6 +125,7 @@ export function useTransactionCostAndData(args: {
121
125
  symbol: chainMetadata.nativeCurrency.symbol,
122
126
  icon: chainMetadata.icon?.url,
123
127
  },
128
+ chainMetadata,
124
129
  decimals: 18,
125
130
  walletBalance,
126
131
  gasCostWei,
@@ -128,12 +133,6 @@ export function useTransactionCostAndData(args: {
128
133
  } satisfies TransactionCostAndData;
129
134
  },
130
135
  enabled: !!transaction && !!txQueryKey,
131
- refetchInterval: () => {
132
- if (transaction.erc20Value) {
133
- // if erc20 value is set, we don't need to poll
134
- return undefined;
135
- }
136
- return 30_000;
137
- },
136
+ refetchInterval: args.refetchIntervalMs || 30_000,
138
137
  });
139
138
  }