@b3dotfun/sdk 0.1.2 → 0.1.5
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.
- package/dist/cjs/anyspend/react/components/AnySpend.d.ts +7 -1
- package/dist/cjs/anyspend/react/components/AnySpend.js +66 -15
- package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +6 -2
- package/dist/cjs/anyspend/react/components/AnySpendCollectorClubPurchase.js +4 -4
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
- package/dist/cjs/anyspend/react/components/AnySpendCustomExactIn.js +185 -50
- package/dist/cjs/anyspend/react/components/AnySpendDeposit.d.ts +6 -1
- package/dist/cjs/anyspend/react/components/AnySpendDeposit.js +19 -4
- package/dist/cjs/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +2 -1
- package/dist/cjs/anyspend/react/components/AnySpendStakeUpsideExactIn.js +2 -2
- package/dist/cjs/anyspend/react/components/QRDeposit.d.ts +4 -1
- package/dist/cjs/anyspend/react/components/QRDeposit.js +12 -4
- package/dist/cjs/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/CryptoPaySection.js +7 -5
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
- package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
- package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/FeeDetailPanel.js +15 -6
- package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
- package/dist/cjs/anyspend/react/components/common/OrderDetails.d.ts +3 -0
- package/dist/cjs/anyspend/react/components/common/OrderDetails.js +11 -10
- package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/common/OrderDetailsCollapsible.js +9 -9
- package/dist/cjs/anyspend/react/components/common/OrderHistory.js +2 -1
- package/dist/cjs/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/PanelOnramp.js +2 -2
- package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
- package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/PointsDetailPanel.js +3 -2
- package/dist/cjs/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
- package/dist/cjs/anyspend/react/components/common/RecipientSelection.js +5 -2
- package/dist/cjs/anyspend/react/components/common/TabSection.d.ts +3 -1
- package/dist/cjs/anyspend/react/components/common/TabSection.js +16 -7
- package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
- package/dist/cjs/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
- package/dist/cjs/anyspend/react/components/common/WarningText.d.ts +8 -7
- package/dist/cjs/anyspend/react/components/common/WarningText.js +5 -6
- package/dist/cjs/anyspend/react/components/index.d.ts +1 -0
- package/dist/cjs/anyspend/react/components/types/classes.d.ts +390 -0
- package/dist/cjs/anyspend/react/components/types/classes.js +6 -0
- package/dist/cjs/anyspend/react/hooks/index.d.ts +1 -0
- package/dist/cjs/anyspend/react/hooks/index.js +1 -0
- package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.d.ts +22 -2
- package/dist/cjs/anyspend/react/hooks/useAnyspendFlow.js +119 -15
- package/dist/cjs/anyspend/react/hooks/useDirectTransfer.d.ts +17 -0
- package/dist/cjs/anyspend/react/hooks/useDirectTransfer.js +46 -0
- package/dist/cjs/anyspend/react/hooks/useRecipientAddressState.js +1 -1
- package/dist/cjs/anyspend/utils/format.js +12 -2
- package/dist/cjs/global-account/react/components/B3DynamicModal.js +1 -5
- package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +1 -3
- package/dist/cjs/global-account/react/components/B3Provider/B3ConfigProvider.js +1 -2
- package/dist/cjs/global-account/react/components/B3Provider/B3Provider.d.ts +1 -4
- package/dist/cjs/global-account/react/components/B3Provider/B3Provider.js +2 -2
- package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.d.ts +1 -1
- package/dist/cjs/global-account/react/components/B3Provider/B3Provider.native.js +1 -1
- package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +1 -4
- package/dist/cjs/global-account/react/components/B3Provider/LocalSDKProvider.js +1 -3
- package/dist/cjs/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +1 -3
- package/dist/cjs/global-account/react/components/ManageAccount/SettingsContent.js +17 -3
- package/dist/cjs/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +19 -152
- package/dist/cjs/global-account/react/components/index.d.ts +0 -1
- package/dist/cjs/global-account/react/components/index.js +3 -6
- package/dist/cjs/global-account/react/hooks/index.d.ts +0 -1
- package/dist/cjs/global-account/react/hooks/index.js +2 -4
- package/dist/cjs/global-account/react/hooks/useAuth.d.ts +2 -3
- package/dist/cjs/global-account/react/hooks/useAuth.js +14 -31
- package/dist/cjs/global-account/react/hooks/useTWAuth.d.ts +1 -1
- package/dist/cjs/global-account/react/hooks/useTWAuth.js +3 -3
- package/dist/cjs/global-account/react/stores/useModalStore.d.ts +8 -19
- package/dist/esm/anyspend/react/components/AnySpend.d.ts +7 -1
- package/dist/esm/anyspend/react/components/AnySpend.js +68 -17
- package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +6 -2
- package/dist/esm/anyspend/react/components/AnySpendCollectorClubPurchase.js +4 -4
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
- package/dist/esm/anyspend/react/components/AnySpendCustomExactIn.js +189 -54
- package/dist/esm/anyspend/react/components/AnySpendDeposit.d.ts +6 -1
- package/dist/esm/anyspend/react/components/AnySpendDeposit.js +19 -4
- package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +2 -1
- package/dist/esm/anyspend/react/components/AnySpendStakeUpsideExactIn.js +2 -2
- package/dist/esm/anyspend/react/components/QRDeposit.d.ts +4 -1
- package/dist/esm/anyspend/react/components/QRDeposit.js +12 -4
- package/dist/esm/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/CryptoPaySection.js +7 -5
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/CryptoPaymentMethod.js +4 -3
- package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/CryptoReceiveSection.js +7 -6
- package/dist/esm/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/FeeDetailPanel.js +15 -6
- package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/FiatPaymentMethod.js +10 -6
- package/dist/esm/anyspend/react/components/common/OrderDetails.d.ts +3 -0
- package/dist/esm/anyspend/react/components/common/OrderDetails.js +11 -10
- package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/esm/anyspend/react/components/common/OrderDetailsCollapsible.js +9 -9
- package/dist/esm/anyspend/react/components/common/OrderHistory.js +2 -1
- package/dist/esm/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/PanelOnramp.js +2 -2
- package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
- package/dist/esm/anyspend/react/components/common/PanelOnrampPayment.js +20 -7
- package/dist/esm/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/PointsDetailPanel.js +3 -2
- package/dist/esm/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
- package/dist/esm/anyspend/react/components/common/RecipientSelection.js +5 -2
- package/dist/esm/anyspend/react/components/common/TabSection.d.ts +3 -1
- package/dist/esm/anyspend/react/components/common/TabSection.js +16 -7
- package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
- package/dist/esm/anyspend/react/components/common/TransferCryptoDetails.js +3 -2
- package/dist/esm/anyspend/react/components/common/WarningText.d.ts +8 -7
- package/dist/esm/anyspend/react/components/common/WarningText.js +5 -6
- package/dist/esm/anyspend/react/components/index.d.ts +1 -0
- package/dist/esm/anyspend/react/components/types/classes.d.ts +390 -0
- package/dist/esm/anyspend/react/components/types/classes.js +5 -0
- package/dist/esm/anyspend/react/hooks/index.d.ts +1 -0
- package/dist/esm/anyspend/react/hooks/index.js +1 -0
- package/dist/esm/anyspend/react/hooks/useAnyspendFlow.d.ts +22 -2
- package/dist/esm/anyspend/react/hooks/useAnyspendFlow.js +119 -16
- package/dist/esm/anyspend/react/hooks/useDirectTransfer.d.ts +17 -0
- package/dist/esm/anyspend/react/hooks/useDirectTransfer.js +43 -0
- package/dist/esm/anyspend/react/hooks/useRecipientAddressState.js +1 -1
- package/dist/esm/anyspend/utils/format.js +12 -2
- package/dist/esm/global-account/react/components/B3DynamicModal.js +1 -5
- package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +1 -3
- package/dist/esm/global-account/react/components/B3Provider/B3ConfigProvider.js +1 -2
- package/dist/esm/global-account/react/components/B3Provider/B3Provider.d.ts +1 -4
- package/dist/esm/global-account/react/components/B3Provider/B3Provider.js +2 -2
- package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.d.ts +1 -1
- package/dist/esm/global-account/react/components/B3Provider/B3Provider.native.js +1 -1
- package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +1 -4
- package/dist/esm/global-account/react/components/B3Provider/LocalSDKProvider.js +1 -3
- package/dist/esm/global-account/react/components/B3Provider/RelayKitProviderWrapper.js +1 -3
- package/dist/esm/global-account/react/components/ManageAccount/SettingsContent.js +16 -2
- package/dist/esm/global-account/react/components/SignInWithB3/SignInWithB3Flow.js +20 -153
- package/dist/esm/global-account/react/components/index.d.ts +0 -1
- package/dist/esm/global-account/react/components/index.js +0 -2
- package/dist/esm/global-account/react/hooks/index.d.ts +0 -1
- package/dist/esm/global-account/react/hooks/index.js +0 -1
- package/dist/esm/global-account/react/hooks/useAuth.d.ts +2 -3
- package/dist/esm/global-account/react/hooks/useAuth.js +14 -31
- package/dist/esm/global-account/react/hooks/useTWAuth.d.ts +1 -1
- package/dist/esm/global-account/react/hooks/useTWAuth.js +3 -3
- package/dist/esm/global-account/react/stores/useModalStore.d.ts +8 -19
- package/dist/styles/index.css +1 -1
- package/dist/types/anyspend/react/components/AnySpend.d.ts +7 -1
- package/dist/types/anyspend/react/components/AnySpendCollectorClubPurchase.d.ts +6 -2
- package/dist/types/anyspend/react/components/AnySpendCustomExactIn.d.ts +6 -0
- package/dist/types/anyspend/react/components/AnySpendDeposit.d.ts +6 -1
- package/dist/types/anyspend/react/components/AnySpendStakeUpsideExactIn.d.ts +2 -1
- package/dist/types/anyspend/react/components/QRDeposit.d.ts +4 -1
- package/dist/types/anyspend/react/components/common/CryptoPaySection.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/CryptoPaymentMethod.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/CryptoReceiveSection.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/FeeDetailPanel.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/FiatPaymentMethod.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/OrderDetails.d.ts +3 -0
- package/dist/types/anyspend/react/components/common/OrderDetailsCollapsible.d.ts +2 -0
- package/dist/types/anyspend/react/components/common/PanelOnramp.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/PanelOnrampPayment.d.ts +2 -0
- package/dist/types/anyspend/react/components/common/PointsDetailPanel.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/RecipientSelection.d.ts +6 -1
- package/dist/types/anyspend/react/components/common/TabSection.d.ts +3 -1
- package/dist/types/anyspend/react/components/common/TransferCryptoDetails.d.ts +2 -0
- package/dist/types/anyspend/react/components/common/WarningText.d.ts +8 -7
- package/dist/types/anyspend/react/components/index.d.ts +1 -0
- package/dist/types/anyspend/react/components/types/classes.d.ts +390 -0
- package/dist/types/anyspend/react/hooks/index.d.ts +1 -0
- package/dist/types/anyspend/react/hooks/useAnyspendFlow.d.ts +22 -2
- package/dist/types/anyspend/react/hooks/useDirectTransfer.d.ts +17 -0
- package/dist/types/global-account/react/components/B3Provider/B3ConfigProvider.d.ts +1 -3
- package/dist/types/global-account/react/components/B3Provider/B3Provider.d.ts +1 -4
- package/dist/types/global-account/react/components/B3Provider/B3Provider.native.d.ts +1 -1
- package/dist/types/global-account/react/components/B3Provider/LocalSDKProvider.d.ts +1 -4
- package/dist/types/global-account/react/components/index.d.ts +0 -1
- package/dist/types/global-account/react/hooks/index.d.ts +0 -1
- package/dist/types/global-account/react/hooks/useAuth.d.ts +2 -3
- package/dist/types/global-account/react/hooks/useTWAuth.d.ts +1 -1
- package/dist/types/global-account/react/stores/useModalStore.d.ts +8 -19
- package/package.json +1 -1
- package/src/anyspend/react/components/AnySpend.tsx +164 -36
- package/src/anyspend/react/components/AnySpendCollectorClubPurchase.tsx +11 -6
- package/src/anyspend/react/components/AnySpendCustomExactIn.tsx +278 -69
- package/src/anyspend/react/components/AnySpendDeposit.tsx +176 -52
- package/src/anyspend/react/components/AnySpendStakeUpsideExactIn.tsx +3 -0
- package/src/anyspend/react/components/QRDeposit.tsx +91 -35
- package/src/anyspend/react/components/common/CryptoPaySection.tsx +31 -19
- package/src/anyspend/react/components/common/CryptoPaymentMethod.tsx +14 -4
- package/src/anyspend/react/components/common/CryptoReceiveSection.tsx +43 -23
- package/src/anyspend/react/components/common/FeeDetailPanel.tsx +53 -32
- package/src/anyspend/react/components/common/FiatPaymentMethod.tsx +26 -13
- package/src/anyspend/react/components/common/OrderDetails.tsx +20 -9
- package/src/anyspend/react/components/common/OrderDetailsCollapsible.tsx +12 -7
- package/src/anyspend/react/components/common/OrderHistory.tsx +2 -1
- package/src/anyspend/react/components/common/PanelOnramp.tsx +4 -1
- package/src/anyspend/react/components/common/PanelOnrampPayment.tsx +118 -40
- package/src/anyspend/react/components/common/PointsDetailPanel.tsx +28 -14
- package/src/anyspend/react/components/common/RecipientSelection.tsx +20 -5
- package/src/anyspend/react/components/common/TabSection.tsx +21 -12
- package/src/anyspend/react/components/common/TransferCryptoDetails.tsx +12 -4
- package/src/anyspend/react/components/common/WarningText.tsx +10 -10
- package/src/anyspend/react/components/index.ts +16 -0
- package/src/anyspend/react/components/types/classes.ts +476 -0
- package/src/anyspend/react/hooks/index.ts +1 -0
- package/src/anyspend/react/hooks/useAnyspendFlow.ts +141 -17
- package/src/anyspend/react/hooks/useDirectTransfer.ts +67 -0
- package/src/anyspend/react/hooks/useRecipientAddressState.ts +1 -1
- package/src/anyspend/utils/format.ts +13 -2
- package/src/global-account/react/components/B3DynamicModal.tsx +0 -5
- package/src/global-account/react/components/B3Provider/B3ConfigProvider.tsx +0 -4
- package/src/global-account/react/components/B3Provider/B3Provider.native.tsx +1 -1
- package/src/global-account/react/components/B3Provider/B3Provider.tsx +1 -11
- package/src/global-account/react/components/B3Provider/LocalSDKProvider.tsx +0 -6
- package/src/global-account/react/components/B3Provider/RelayKitProviderWrapper.tsx +1 -4
- package/src/global-account/react/components/ManageAccount/SettingsContent.tsx +33 -1
- package/src/global-account/react/components/SignInWithB3/SignInWithB3Flow.tsx +27 -184
- package/src/global-account/react/components/index.ts +0 -3
- package/src/global-account/react/hooks/index.ts +0 -1
- package/src/global-account/react/hooks/useAuth.ts +14 -31
- package/src/global-account/react/hooks/useTWAuth.tsx +3 -5
- package/src/global-account/react/stores/useModalStore.ts +7 -20
- package/dist/cjs/global-account/react/components/TurnkeyAuthModal.d.ts +0 -8
- package/dist/cjs/global-account/react/components/TurnkeyAuthModal.js +0 -86
- package/dist/cjs/global-account/react/hooks/useTurnkeyAuth.d.ts +0 -20
- package/dist/cjs/global-account/react/hooks/useTurnkeyAuth.js +0 -142
- package/dist/esm/global-account/react/components/TurnkeyAuthModal.d.ts +0 -8
- package/dist/esm/global-account/react/components/TurnkeyAuthModal.js +0 -83
- package/dist/esm/global-account/react/hooks/useTurnkeyAuth.d.ts +0 -20
- package/dist/esm/global-account/react/hooks/useTurnkeyAuth.js +0 -136
- package/dist/types/global-account/react/components/TurnkeyAuthModal.d.ts +0 -8
- package/dist/types/global-account/react/hooks/useTurnkeyAuth.d.ts +0 -20
- package/src/global-account/react/components/TurnkeyAuthModal.tsx +0 -243
- package/src/global-account/react/hooks/useTurnkeyAuth.ts +0 -171
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Classes prop types for AnySpend components customization.
|
|
3
|
+
* Use these to override default styling of specific elements.
|
|
4
|
+
*/
|
|
5
|
+
/** Classes for AnySpendDeposit component */
|
|
6
|
+
export interface AnySpendDepositClasses {
|
|
7
|
+
root?: string;
|
|
8
|
+
chainSelection?: string;
|
|
9
|
+
form?: string;
|
|
10
|
+
formContent?: string;
|
|
11
|
+
closeButton?: string;
|
|
12
|
+
balanceContainer?: string;
|
|
13
|
+
balanceLabel?: string;
|
|
14
|
+
balanceValue?: string;
|
|
15
|
+
optionsContainer?: string;
|
|
16
|
+
chainsSkeleton?: string;
|
|
17
|
+
skeletonItem?: string;
|
|
18
|
+
chainsContainer?: string;
|
|
19
|
+
chainButton?: string;
|
|
20
|
+
chainContent?: string;
|
|
21
|
+
chainInfo?: string;
|
|
22
|
+
chainName?: string;
|
|
23
|
+
chainIcon?: string;
|
|
24
|
+
chainBalance?: string;
|
|
25
|
+
chainChevron?: string;
|
|
26
|
+
generalOptions?: string;
|
|
27
|
+
optionButton?: string;
|
|
28
|
+
cryptoButton?: string;
|
|
29
|
+
qrButton?: string;
|
|
30
|
+
fiatButton?: string;
|
|
31
|
+
optionContent?: string;
|
|
32
|
+
optionInfo?: string;
|
|
33
|
+
optionTitle?: string;
|
|
34
|
+
optionDescription?: string;
|
|
35
|
+
optionIcon?: string;
|
|
36
|
+
optionChevron?: string;
|
|
37
|
+
divider?: string;
|
|
38
|
+
dividerLine?: string;
|
|
39
|
+
dividerText?: string;
|
|
40
|
+
backButton?: string;
|
|
41
|
+
backIcon?: string;
|
|
42
|
+
backText?: string;
|
|
43
|
+
header?: string;
|
|
44
|
+
title?: string;
|
|
45
|
+
}
|
|
46
|
+
/** Classes for AnySpend component */
|
|
47
|
+
export interface AnySpendClasses {
|
|
48
|
+
root?: string;
|
|
49
|
+
container?: string;
|
|
50
|
+
header?: string;
|
|
51
|
+
headerLogo?: string;
|
|
52
|
+
headerTitle?: string;
|
|
53
|
+
tabSection?: string;
|
|
54
|
+
tabList?: string;
|
|
55
|
+
tabTrigger?: string;
|
|
56
|
+
tabTriggerActive?: string;
|
|
57
|
+
mainContent?: string;
|
|
58
|
+
inputSection?: string;
|
|
59
|
+
swapDirectionButton?: string;
|
|
60
|
+
mainButton?: string;
|
|
61
|
+
mainButtonDisabled?: string;
|
|
62
|
+
mainButtonError?: string;
|
|
63
|
+
historyButton?: string;
|
|
64
|
+
bottomNavigation?: string;
|
|
65
|
+
gasIndicator?: string;
|
|
66
|
+
}
|
|
67
|
+
/** Classes for AnySpendCustomExactIn component */
|
|
68
|
+
export interface AnySpendCustomExactInClasses {
|
|
69
|
+
root?: string;
|
|
70
|
+
container?: string;
|
|
71
|
+
header?: string;
|
|
72
|
+
headerTitle?: string;
|
|
73
|
+
headerDescription?: string;
|
|
74
|
+
contentArea?: string;
|
|
75
|
+
inputSection?: string;
|
|
76
|
+
swapDirectionButton?: string;
|
|
77
|
+
mainButton?: string;
|
|
78
|
+
mainButtonDisabled?: string;
|
|
79
|
+
mainButtonError?: string;
|
|
80
|
+
footer?: string;
|
|
81
|
+
gasIndicator?: string;
|
|
82
|
+
}
|
|
83
|
+
/** Classes for CryptoPaySection component */
|
|
84
|
+
export interface CryptoPaySectionClasses {
|
|
85
|
+
root?: string;
|
|
86
|
+
container?: string;
|
|
87
|
+
label?: string;
|
|
88
|
+
inputContainer?: string;
|
|
89
|
+
input?: string;
|
|
90
|
+
tokenSelector?: string;
|
|
91
|
+
tokenIcon?: string;
|
|
92
|
+
tokenSymbol?: string;
|
|
93
|
+
chainBadge?: string;
|
|
94
|
+
balanceRow?: string;
|
|
95
|
+
balanceLabel?: string;
|
|
96
|
+
balanceValue?: string;
|
|
97
|
+
maxButton?: string;
|
|
98
|
+
paymentMethodButton?: string;
|
|
99
|
+
feeRow?: string;
|
|
100
|
+
}
|
|
101
|
+
/** Classes for CryptoReceiveSection component */
|
|
102
|
+
export interface CryptoReceiveSectionClasses {
|
|
103
|
+
root?: string;
|
|
104
|
+
container?: string;
|
|
105
|
+
label?: string;
|
|
106
|
+
inputContainer?: string;
|
|
107
|
+
input?: string;
|
|
108
|
+
tokenSelector?: string;
|
|
109
|
+
tokenIcon?: string;
|
|
110
|
+
tokenSymbol?: string;
|
|
111
|
+
chainBadge?: string;
|
|
112
|
+
recipientRow?: string;
|
|
113
|
+
recipientLabel?: string;
|
|
114
|
+
recipientValue?: string;
|
|
115
|
+
recipientButton?: string;
|
|
116
|
+
pointsRow?: string;
|
|
117
|
+
feeRow?: string;
|
|
118
|
+
}
|
|
119
|
+
/** Classes for PanelOnramp component */
|
|
120
|
+
export interface PanelOnrampClasses {
|
|
121
|
+
root?: string;
|
|
122
|
+
container?: string;
|
|
123
|
+
amountInput?: string;
|
|
124
|
+
presetButtons?: string;
|
|
125
|
+
presetButton?: string;
|
|
126
|
+
paymentMethodRow?: string;
|
|
127
|
+
recipientRow?: string;
|
|
128
|
+
destinationRow?: string;
|
|
129
|
+
feeRow?: string;
|
|
130
|
+
pointsRow?: string;
|
|
131
|
+
}
|
|
132
|
+
/** Classes for OrderDetails component */
|
|
133
|
+
export interface OrderDetailsClasses {
|
|
134
|
+
root?: string;
|
|
135
|
+
container?: string;
|
|
136
|
+
header?: string;
|
|
137
|
+
statusBadge?: string;
|
|
138
|
+
statusPending?: string;
|
|
139
|
+
statusSuccess?: string;
|
|
140
|
+
statusFailed?: string;
|
|
141
|
+
amountSection?: string;
|
|
142
|
+
detailsSection?: string;
|
|
143
|
+
detailRow?: string;
|
|
144
|
+
detailLabel?: string;
|
|
145
|
+
detailValue?: string;
|
|
146
|
+
transactionLink?: string;
|
|
147
|
+
actionButton?: string;
|
|
148
|
+
backButton?: string;
|
|
149
|
+
returnButton?: string;
|
|
150
|
+
}
|
|
151
|
+
/** Classes for RecipientSelection component */
|
|
152
|
+
export interface RecipientSelectionClasses {
|
|
153
|
+
root?: string;
|
|
154
|
+
container?: string;
|
|
155
|
+
header?: string;
|
|
156
|
+
searchInput?: string;
|
|
157
|
+
recipientList?: string;
|
|
158
|
+
recipientItem?: string;
|
|
159
|
+
recipientItemActive?: string;
|
|
160
|
+
recipientAvatar?: string;
|
|
161
|
+
recipientName?: string;
|
|
162
|
+
recipientAddress?: string;
|
|
163
|
+
confirmButton?: string;
|
|
164
|
+
backButton?: string;
|
|
165
|
+
}
|
|
166
|
+
/** Classes for CryptoPaymentMethod component */
|
|
167
|
+
export interface CryptoPaymentMethodClasses {
|
|
168
|
+
root?: string;
|
|
169
|
+
container?: string;
|
|
170
|
+
header?: string;
|
|
171
|
+
optionsList?: string;
|
|
172
|
+
optionItem?: string;
|
|
173
|
+
optionItemActive?: string;
|
|
174
|
+
optionIcon?: string;
|
|
175
|
+
optionLabel?: string;
|
|
176
|
+
optionDescription?: string;
|
|
177
|
+
backButton?: string;
|
|
178
|
+
}
|
|
179
|
+
/** Classes for FiatPaymentMethod component */
|
|
180
|
+
export interface FiatPaymentMethodClasses {
|
|
181
|
+
root?: string;
|
|
182
|
+
container?: string;
|
|
183
|
+
header?: string;
|
|
184
|
+
optionsList?: string;
|
|
185
|
+
optionItem?: string;
|
|
186
|
+
optionItemActive?: string;
|
|
187
|
+
optionIcon?: string;
|
|
188
|
+
optionLabel?: string;
|
|
189
|
+
optionDescription?: string;
|
|
190
|
+
backButton?: string;
|
|
191
|
+
}
|
|
192
|
+
/** Classes for WarningText component */
|
|
193
|
+
export interface WarningTextClasses {
|
|
194
|
+
root?: string;
|
|
195
|
+
}
|
|
196
|
+
/** Classes for ChainWarningText component */
|
|
197
|
+
export interface ChainWarningTextClasses {
|
|
198
|
+
root?: string;
|
|
199
|
+
}
|
|
200
|
+
/** Classes for TabSection component */
|
|
201
|
+
export interface TabSectionClasses {
|
|
202
|
+
root?: string;
|
|
203
|
+
container?: string;
|
|
204
|
+
tabIndicator?: string;
|
|
205
|
+
tabButton?: string;
|
|
206
|
+
tabButtonActive?: string;
|
|
207
|
+
}
|
|
208
|
+
/** Classes for FeeDetailPanel component */
|
|
209
|
+
export interface FeeDetailPanelClasses {
|
|
210
|
+
root?: string;
|
|
211
|
+
container?: string;
|
|
212
|
+
title?: string;
|
|
213
|
+
tierCard?: string;
|
|
214
|
+
tierCardTitle?: string;
|
|
215
|
+
tierRow?: string;
|
|
216
|
+
tierRowActive?: string;
|
|
217
|
+
tierLabel?: string;
|
|
218
|
+
tierValue?: string;
|
|
219
|
+
expandButton?: string;
|
|
220
|
+
summaryCard?: string;
|
|
221
|
+
summaryRow?: string;
|
|
222
|
+
summaryLabel?: string;
|
|
223
|
+
summaryValue?: string;
|
|
224
|
+
summaryDivider?: string;
|
|
225
|
+
totalRow?: string;
|
|
226
|
+
totalLabel?: string;
|
|
227
|
+
totalValue?: string;
|
|
228
|
+
backButton?: string;
|
|
229
|
+
}
|
|
230
|
+
/** Classes for PointsDetailPanel component */
|
|
231
|
+
export interface PointsDetailPanelClasses {
|
|
232
|
+
root?: string;
|
|
233
|
+
container?: string;
|
|
234
|
+
title?: string;
|
|
235
|
+
description?: string;
|
|
236
|
+
highlightText?: string;
|
|
237
|
+
link?: string;
|
|
238
|
+
infoCard?: string;
|
|
239
|
+
infoCardTitle?: string;
|
|
240
|
+
infoList?: string;
|
|
241
|
+
infoListItem?: string;
|
|
242
|
+
backButton?: string;
|
|
243
|
+
}
|
|
244
|
+
/** Classes for PanelOnrampPayment component */
|
|
245
|
+
export interface PanelOnrampPaymentClasses {
|
|
246
|
+
root?: string;
|
|
247
|
+
container?: string;
|
|
248
|
+
summaryTitle?: string;
|
|
249
|
+
summaryCard?: string;
|
|
250
|
+
summaryRow?: string;
|
|
251
|
+
summaryLabel?: string;
|
|
252
|
+
summaryValue?: string;
|
|
253
|
+
summaryDivider?: string;
|
|
254
|
+
amountRow?: string;
|
|
255
|
+
amountValue?: string;
|
|
256
|
+
feeText?: string;
|
|
257
|
+
loadingContainer?: string;
|
|
258
|
+
loadingSpinner?: string;
|
|
259
|
+
loadingText?: string;
|
|
260
|
+
paymentMethodTitle?: string;
|
|
261
|
+
paymentMethodIcons?: string;
|
|
262
|
+
paymentOption?: string;
|
|
263
|
+
paymentOptionIcon?: string;
|
|
264
|
+
paymentOptionContent?: string;
|
|
265
|
+
paymentOptionTitle?: string;
|
|
266
|
+
paymentOptionDescription?: string;
|
|
267
|
+
paymentOptionFee?: string;
|
|
268
|
+
paymentOptionChevron?: string;
|
|
269
|
+
backButton?: string;
|
|
270
|
+
}
|
|
271
|
+
/** Classes for OrderDetailsCollapsible component */
|
|
272
|
+
export interface OrderDetailsCollapsibleClasses {
|
|
273
|
+
root?: string;
|
|
274
|
+
container?: string;
|
|
275
|
+
expandedContent?: string;
|
|
276
|
+
recipientSection?: string;
|
|
277
|
+
recipientLabel?: string;
|
|
278
|
+
recipientInfo?: string;
|
|
279
|
+
recipientName?: string;
|
|
280
|
+
recipientAddress?: string;
|
|
281
|
+
recipientCopyIcon?: string;
|
|
282
|
+
divider?: string;
|
|
283
|
+
expectedSection?: string;
|
|
284
|
+
expectedLabel?: string;
|
|
285
|
+
expectedValue?: string;
|
|
286
|
+
expectedAmount?: string;
|
|
287
|
+
chainInfo?: string;
|
|
288
|
+
chainText?: string;
|
|
289
|
+
chainLogo?: string;
|
|
290
|
+
pointsSection?: string;
|
|
291
|
+
pointsLabel?: string;
|
|
292
|
+
pointsValue?: string;
|
|
293
|
+
idSection?: string;
|
|
294
|
+
idLabel?: string;
|
|
295
|
+
idValue?: string;
|
|
296
|
+
collapsedContainer?: string;
|
|
297
|
+
collapsedButton?: string;
|
|
298
|
+
collapsedChevron?: string;
|
|
299
|
+
}
|
|
300
|
+
/** Classes for TransferCryptoDetails component */
|
|
301
|
+
export interface TransferCryptoDetailsClasses {
|
|
302
|
+
root?: string;
|
|
303
|
+
container?: string;
|
|
304
|
+
header?: string;
|
|
305
|
+
backButton?: string;
|
|
306
|
+
title?: string;
|
|
307
|
+
timer?: string;
|
|
308
|
+
timerSvg?: string;
|
|
309
|
+
timerBackground?: string;
|
|
310
|
+
timerProgress?: string;
|
|
311
|
+
timerText?: string;
|
|
312
|
+
cardsContainer?: string;
|
|
313
|
+
amountCard?: string;
|
|
314
|
+
amountLabel?: string;
|
|
315
|
+
amountContainer?: string;
|
|
316
|
+
amountText?: string;
|
|
317
|
+
amountCopyIcon?: string;
|
|
318
|
+
chainCard?: string;
|
|
319
|
+
chainLabel?: string;
|
|
320
|
+
chainContainer?: string;
|
|
321
|
+
chainLogo?: string;
|
|
322
|
+
chainName?: string;
|
|
323
|
+
qrDepositCard?: string;
|
|
324
|
+
qrSection?: string;
|
|
325
|
+
qrWrapper?: string;
|
|
326
|
+
qrContainer?: string;
|
|
327
|
+
qrCode?: string;
|
|
328
|
+
walletHint?: string;
|
|
329
|
+
walletText?: string;
|
|
330
|
+
walletIcon?: string;
|
|
331
|
+
addressSection?: string;
|
|
332
|
+
addressLabel?: string;
|
|
333
|
+
addressCopyContainer?: string;
|
|
334
|
+
addressText?: string;
|
|
335
|
+
addressCopyIcon?: string;
|
|
336
|
+
actionsContainer?: string;
|
|
337
|
+
copyButton?: string;
|
|
338
|
+
}
|
|
339
|
+
/** Classes for QRDeposit component */
|
|
340
|
+
export interface QRDepositClasses {
|
|
341
|
+
root?: string;
|
|
342
|
+
container?: string;
|
|
343
|
+
content?: string;
|
|
344
|
+
header?: string;
|
|
345
|
+
backButton?: string;
|
|
346
|
+
title?: string;
|
|
347
|
+
closeButton?: string;
|
|
348
|
+
tokenSelectorContainer?: string;
|
|
349
|
+
tokenSelectorLabel?: string;
|
|
350
|
+
tokenSelectorTrigger?: string;
|
|
351
|
+
qrContent?: string;
|
|
352
|
+
qrCodeContainer?: string;
|
|
353
|
+
qrCode?: string;
|
|
354
|
+
qrScanHint?: string;
|
|
355
|
+
addressContainer?: string;
|
|
356
|
+
addressLabel?: string;
|
|
357
|
+
addressRow?: string;
|
|
358
|
+
address?: string;
|
|
359
|
+
addressCopyIcon?: string;
|
|
360
|
+
watchingIndicator?: string;
|
|
361
|
+
copyButton?: string;
|
|
362
|
+
loadingContainer?: string;
|
|
363
|
+
loadingContent?: string;
|
|
364
|
+
loadingSpinner?: string;
|
|
365
|
+
loadingText?: string;
|
|
366
|
+
orderDetailsContainer?: string;
|
|
367
|
+
orderDetailsContent?: string;
|
|
368
|
+
}
|
|
369
|
+
/** Combined classes for all AnySpend-related components */
|
|
370
|
+
export interface AnySpendAllClasses {
|
|
371
|
+
deposit?: AnySpendDepositClasses;
|
|
372
|
+
anySpend?: AnySpendClasses;
|
|
373
|
+
customExactIn?: AnySpendCustomExactInClasses;
|
|
374
|
+
cryptoPaySection?: CryptoPaySectionClasses;
|
|
375
|
+
cryptoReceiveSection?: CryptoReceiveSectionClasses;
|
|
376
|
+
panelOnramp?: PanelOnrampClasses;
|
|
377
|
+
orderDetails?: OrderDetailsClasses;
|
|
378
|
+
recipientSelection?: RecipientSelectionClasses;
|
|
379
|
+
cryptoPaymentMethod?: CryptoPaymentMethodClasses;
|
|
380
|
+
fiatPaymentMethod?: FiatPaymentMethodClasses;
|
|
381
|
+
qrDeposit?: QRDepositClasses;
|
|
382
|
+
warningText?: WarningTextClasses;
|
|
383
|
+
chainWarningText?: ChainWarningTextClasses;
|
|
384
|
+
tabSection?: TabSectionClasses;
|
|
385
|
+
feeDetailPanel?: FeeDetailPanelClasses;
|
|
386
|
+
pointsDetailPanel?: PointsDetailPanelClasses;
|
|
387
|
+
panelOnrampPayment?: PanelOnrampPaymentClasses;
|
|
388
|
+
orderDetailsCollapsible?: OrderDetailsCollapsibleClasses;
|
|
389
|
+
transferCryptoDetails?: TransferCryptoDetailsClasses;
|
|
390
|
+
}
|
|
@@ -9,8 +9,22 @@ export declare enum PanelView {
|
|
|
9
9
|
ORDER_DETAILS = 4,
|
|
10
10
|
LOADING = 5,
|
|
11
11
|
POINTS_DETAIL = 6,
|
|
12
|
-
FEE_DETAIL = 7
|
|
12
|
+
FEE_DETAIL = 7,
|
|
13
|
+
DIRECT_TRANSFER_SUCCESS = 8
|
|
13
14
|
}
|
|
15
|
+
export type CustomExactInConfig = {
|
|
16
|
+
functionAbi: string;
|
|
17
|
+
functionName: string;
|
|
18
|
+
functionArgs: string[];
|
|
19
|
+
to: string;
|
|
20
|
+
spenderAddress?: string;
|
|
21
|
+
action?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Generates encoded function data for custom contract calls.
|
|
25
|
+
* Handles amount placeholder replacement and BigInt conversion.
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateEncodedData(config: CustomExactInConfig | undefined, amountInWei: string): string | undefined;
|
|
14
28
|
interface UseAnyspendFlowProps {
|
|
15
29
|
paymentType?: "crypto" | "fiat";
|
|
16
30
|
recipientAddress?: string;
|
|
@@ -25,8 +39,9 @@ interface UseAnyspendFlowProps {
|
|
|
25
39
|
slippage?: number;
|
|
26
40
|
disableUrlParamManagement?: boolean;
|
|
27
41
|
orderType?: "hype_duel" | "custom_exact_in" | "swap";
|
|
42
|
+
customExactInConfig?: CustomExactInConfig;
|
|
28
43
|
}
|
|
29
|
-
export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage, disableUrlParamManagement, orderType, }: UseAnyspendFlowProps): {
|
|
44
|
+
export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage, disableUrlParamManagement, orderType, customExactInConfig, }: UseAnyspendFlowProps): {
|
|
30
45
|
activePanel: PanelView;
|
|
31
46
|
setActivePanel: import("react").Dispatch<import("react").SetStateAction<PanelView>>;
|
|
32
47
|
orderId: string | undefined;
|
|
@@ -91,8 +106,11 @@ export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrd
|
|
|
91
106
|
setSrcAmount: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
92
107
|
dstAmount: string;
|
|
93
108
|
setDstAmount: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
109
|
+
dstAmountInput: string;
|
|
110
|
+
setDstAmountInput: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
94
111
|
isSrcInputDirty: boolean;
|
|
95
112
|
setIsSrcInputDirty: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
113
|
+
tradeType: string;
|
|
96
114
|
cryptoPaymentMethod: CryptoPaymentMethodType;
|
|
97
115
|
setCryptoPaymentMethod: (method: CryptoPaymentMethodType) => void;
|
|
98
116
|
selectedCryptoPaymentMethod: CryptoPaymentMethodType;
|
|
@@ -176,8 +194,10 @@ export declare function useAnyspendFlow({ paymentType, recipientAddress, loadOrd
|
|
|
176
194
|
statusCode: number;
|
|
177
195
|
} | undefined;
|
|
178
196
|
isLoadingAnyspendQuote: boolean;
|
|
197
|
+
isQuoteLoading: boolean;
|
|
179
198
|
getAnyspendQuoteError: Error | null;
|
|
180
199
|
activeInputAmountInWei: string;
|
|
200
|
+
activeOutputAmountInWei: string;
|
|
181
201
|
geoData: import("../../../anyspend/react").GeoData | undefined;
|
|
182
202
|
coinbaseAvailablePaymentMethods: {
|
|
183
203
|
id?: string;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { B3_TOKEN, getDefaultToken, USDC_BASE } from "../../../anyspend/index.js";
|
|
2
2
|
import { useAnyspendCreateOnrampOrder, useAnyspendCreateOrder, useAnyspendOrderAndTransactions, useAnyspendQuote, useGeoOnrampOptions, } from "../../../anyspend/react/index.js";
|
|
3
3
|
import { anyspendService } from "../../../anyspend/services/anyspend.js";
|
|
4
|
+
import { normalizeAddress } from "../../../anyspend/utils/index.js";
|
|
4
5
|
import { toast, useAccountWallet, useProfile, useRouter, useSearchParamsSSR, useTokenBalance, } from "../../../global-account/react/index.js";
|
|
5
6
|
import { formatTokenAmount, formatUnits } from "../../../shared/utils/number.js";
|
|
6
7
|
import { useEffect, useMemo, useState } from "react";
|
|
7
|
-
import { parseUnits } from "viem";
|
|
8
|
+
import { encodeFunctionData, parseUnits } from "viem";
|
|
8
9
|
import { base, mainnet } from "viem/chains";
|
|
9
10
|
import { CryptoPaymentMethodType } from "../components/common/CryptoPaymentMethod.js";
|
|
10
11
|
import { FiatPaymentMethod } from "../components/common/FiatPaymentMethod.js";
|
|
@@ -22,9 +23,52 @@ export var PanelView;
|
|
|
22
23
|
PanelView[PanelView["LOADING"] = 5] = "LOADING";
|
|
23
24
|
PanelView[PanelView["POINTS_DETAIL"] = 6] = "POINTS_DETAIL";
|
|
24
25
|
PanelView[PanelView["FEE_DETAIL"] = 7] = "FEE_DETAIL";
|
|
26
|
+
PanelView[PanelView["DIRECT_TRANSFER_SUCCESS"] = 8] = "DIRECT_TRANSFER_SUCCESS";
|
|
25
27
|
})(PanelView || (PanelView = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Generates encoded function data for custom contract calls.
|
|
30
|
+
* Handles amount placeholder replacement and BigInt conversion.
|
|
31
|
+
*/
|
|
32
|
+
export function generateEncodedData(config, amountInWei) {
|
|
33
|
+
if (!config || !config.functionAbi || !config.functionName || !config.functionArgs) {
|
|
34
|
+
console.warn("customExactInConfig missing required fields for encoding:", {
|
|
35
|
+
hasConfig: !!config,
|
|
36
|
+
hasFunctionAbi: !!config?.functionAbi,
|
|
37
|
+
hasFunctionName: !!config?.functionName,
|
|
38
|
+
hasFunctionArgs: !!config?.functionArgs,
|
|
39
|
+
});
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const abi = JSON.parse(config.functionAbi);
|
|
44
|
+
const processedArgs = config.functionArgs.map(arg => {
|
|
45
|
+
// Replace amount placeholders ({{dstAmount}}, {{amount_out}}, etc.)
|
|
46
|
+
if (arg === "{{dstAmount}}" || arg === "{{amount_out}}") {
|
|
47
|
+
return BigInt(amountInWei);
|
|
48
|
+
}
|
|
49
|
+
// Convert numeric strings to BigInt for uint256 args
|
|
50
|
+
if (/^\d+$/.test(arg)) {
|
|
51
|
+
return BigInt(arg);
|
|
52
|
+
}
|
|
53
|
+
return arg;
|
|
54
|
+
});
|
|
55
|
+
return encodeFunctionData({
|
|
56
|
+
abi,
|
|
57
|
+
functionName: config.functionName,
|
|
58
|
+
args: processedArgs,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
console.error("Failed to encode function data:", e, {
|
|
63
|
+
functionAbi: config.functionAbi,
|
|
64
|
+
functionName: config.functionName,
|
|
65
|
+
functionArgs: config.functionArgs,
|
|
66
|
+
});
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
26
70
|
// This hook serves for order hype_duel and custom_exact_in
|
|
27
|
-
export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage = 0, disableUrlParamManagement = false, orderType = "hype_duel", }) {
|
|
71
|
+
export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, loadOrder, onOrderSuccess, onTransactionSuccess, sourceTokenAddress, sourceTokenChainId, destinationTokenAddress, destinationTokenChainId, slippage = 0, disableUrlParamManagement = false, orderType = "hype_duel", customExactInConfig, }) {
|
|
28
72
|
const searchParams = useSearchParamsSSR();
|
|
29
73
|
const router = useRouter();
|
|
30
74
|
// Panel and order state
|
|
@@ -39,6 +83,8 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
39
83
|
const [selectedDstToken, setSelectedDstToken] = useState(defaultDstToken);
|
|
40
84
|
const [srcAmount, setSrcAmount] = useState(paymentType === "fiat" ? "5" : "0");
|
|
41
85
|
const [dstAmount, setDstAmount] = useState("");
|
|
86
|
+
const [dstAmountInput, setDstAmountInput] = useState(""); // User input for destination amount (EXACT_OUTPUT mode)
|
|
87
|
+
const [debouncedDstAmountInput, setDebouncedDstAmountInput] = useState(""); // Debounced version for quote requests
|
|
42
88
|
const [isSrcInputDirty, setIsSrcInputDirty] = useState(true);
|
|
43
89
|
// Derive destination chain ID from token or prop (cannot change)
|
|
44
90
|
const selectedDstChainId = destinationTokenChainId || selectedDstToken.chainId;
|
|
@@ -116,6 +162,16 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
116
162
|
};
|
|
117
163
|
fetchDestinationToken();
|
|
118
164
|
}, [destinationTokenAddress, destinationTokenChainId]);
|
|
165
|
+
// Check if destination token is ready (matches the expected address from props)
|
|
166
|
+
// This is important for EXACT_OUTPUT mode where we need correct decimals
|
|
167
|
+
const isDestinationTokenReady = !destinationTokenAddress || selectedDstToken.address.toLowerCase() === destinationTokenAddress.toLowerCase();
|
|
168
|
+
// Debounce destination amount input for quote requests (500ms delay)
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
const timer = setTimeout(() => {
|
|
171
|
+
setDebouncedDstAmountInput(dstAmountInput);
|
|
172
|
+
}, 500);
|
|
173
|
+
return () => clearTimeout(timer);
|
|
174
|
+
}, [dstAmountInput]);
|
|
119
175
|
// Helper function for onramp vendor mapping
|
|
120
176
|
const getOnrampVendor = (paymentMethod) => {
|
|
121
177
|
switch (paymentMethod) {
|
|
@@ -129,8 +185,16 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
129
185
|
};
|
|
130
186
|
// Get quote
|
|
131
187
|
// For fiat payments, always use USDC decimals (6) regardless of selectedSrcToken
|
|
132
|
-
const
|
|
133
|
-
const activeInputAmountInWei = parseUnits(srcAmount.replace(/,/g, ""),
|
|
188
|
+
const effectiveSrcDecimals = paymentType === "fiat" ? USDC_BASE.decimals : selectedSrcToken.decimals;
|
|
189
|
+
const activeInputAmountInWei = parseUnits(srcAmount.replace(/,/g, ""), effectiveSrcDecimals).toString();
|
|
190
|
+
// Calculate output amount in wei for EXACT_OUTPUT mode
|
|
191
|
+
// Only calculate when destination token is ready (has correct decimals)
|
|
192
|
+
// Use debounced value to reduce quote API calls
|
|
193
|
+
const activeOutputAmountInWei = isDestinationTokenReady
|
|
194
|
+
? parseUnits(debouncedDstAmountInput.replace(/,/g, "") || "0", selectedDstToken.decimals).toString()
|
|
195
|
+
: "0";
|
|
196
|
+
// Determine trade type based on which input was last edited
|
|
197
|
+
const tradeType = isSrcInputDirty ? "EXACT_INPUT" : "EXACT_OUTPUT";
|
|
134
198
|
// Build quote request based on order type
|
|
135
199
|
const quoteRequest = (() => {
|
|
136
200
|
const baseParams = {
|
|
@@ -145,8 +209,8 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
145
209
|
return {
|
|
146
210
|
...baseParams,
|
|
147
211
|
type: "swap",
|
|
148
|
-
tradeType:
|
|
149
|
-
amount: activeInputAmountInWei,
|
|
212
|
+
tradeType: tradeType,
|
|
213
|
+
amount: tradeType === "EXACT_INPUT" ? activeInputAmountInWei : activeOutputAmountInWei,
|
|
150
214
|
};
|
|
151
215
|
}
|
|
152
216
|
else if (orderType === "hype_duel") {
|
|
@@ -157,6 +221,22 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
157
221
|
};
|
|
158
222
|
}
|
|
159
223
|
else {
|
|
224
|
+
// custom_exact_in - for EXACT_OUTPUT, use custom type to get the quote
|
|
225
|
+
if (tradeType === "EXACT_OUTPUT") {
|
|
226
|
+
const encodedData = generateEncodedData(customExactInConfig, activeOutputAmountInWei);
|
|
227
|
+
return {
|
|
228
|
+
...baseParams,
|
|
229
|
+
type: "custom",
|
|
230
|
+
payload: {
|
|
231
|
+
amount: activeOutputAmountInWei,
|
|
232
|
+
data: encodedData || "",
|
|
233
|
+
to: customExactInConfig ? normalizeAddress(customExactInConfig.to) : "",
|
|
234
|
+
spenderAddress: customExactInConfig?.spenderAddress
|
|
235
|
+
? normalizeAddress(customExactInConfig.spenderAddress)
|
|
236
|
+
: undefined,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
160
240
|
return {
|
|
161
241
|
...baseParams,
|
|
162
242
|
type: "custom_exact_in",
|
|
@@ -165,22 +245,40 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
165
245
|
}
|
|
166
246
|
})();
|
|
167
247
|
const { anyspendQuote, isLoadingAnyspendQuote, getAnyspendQuoteError } = useAnyspendQuote(quoteRequest);
|
|
248
|
+
// Combined loading state: includes debounce waiting period and actual quote fetching
|
|
249
|
+
// For EXACT_OUTPUT mode, also check if we're waiting for debounce
|
|
250
|
+
const isDebouncingDstAmount = tradeType === "EXACT_OUTPUT" && dstAmountInput !== debouncedDstAmountInput;
|
|
251
|
+
const isQuoteLoading = isLoadingAnyspendQuote || isDebouncingDstAmount;
|
|
168
252
|
// Get geo options for fiat
|
|
169
253
|
const { geoData, coinbaseAvailablePaymentMethods, stripeWeb2Support } = useGeoOnrampOptions(paymentType === "fiat" ? formatUnits(activeInputAmountInWei, USDC_BASE.decimals) : "0");
|
|
170
|
-
// Update
|
|
254
|
+
// Update amounts when quote changes based on trade type
|
|
171
255
|
useEffect(() => {
|
|
172
|
-
if (
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
256
|
+
if (isSrcInputDirty) {
|
|
257
|
+
// EXACT_INPUT mode: update destination amount from quote
|
|
258
|
+
if (anyspendQuote?.data?.currencyOut?.amount && anyspendQuote.data.currencyOut.currency?.decimals) {
|
|
259
|
+
const amount = anyspendQuote.data.currencyOut.amount;
|
|
260
|
+
const decimals = anyspendQuote.data.currencyOut.currency.decimals;
|
|
261
|
+
// Apply slippage (0-100) - reduce amount by slippage percentage
|
|
262
|
+
const amountWithSlippage = (BigInt(amount) * BigInt(100 - slippage)) / BigInt(100);
|
|
263
|
+
const formattedAmount = formatTokenAmount(amountWithSlippage, decimals, 6, false);
|
|
264
|
+
setDstAmount(formattedAmount);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
setDstAmount("");
|
|
268
|
+
}
|
|
179
269
|
}
|
|
180
270
|
else {
|
|
181
|
-
|
|
271
|
+
// EXACT_OUTPUT mode: update source amount from quote
|
|
272
|
+
if (anyspendQuote?.data?.currencyIn?.amount && anyspendQuote.data.currencyIn.currency?.decimals) {
|
|
273
|
+
const amount = anyspendQuote.data.currencyIn.amount;
|
|
274
|
+
const decimals = anyspendQuote.data.currencyIn.currency.decimals;
|
|
275
|
+
const formattedAmount = formatTokenAmount(BigInt(amount), decimals, 6, false);
|
|
276
|
+
setSrcAmount(formattedAmount);
|
|
277
|
+
}
|
|
278
|
+
// Also set the display destination amount from the user input
|
|
279
|
+
setDstAmount(dstAmountInput);
|
|
182
280
|
}
|
|
183
|
-
}, [anyspendQuote, slippage]);
|
|
281
|
+
}, [anyspendQuote, slippage, isSrcInputDirty, dstAmountInput]);
|
|
184
282
|
// Update useEffect for URL parameter to not override loadOrder
|
|
185
283
|
useEffect(() => {
|
|
186
284
|
if (loadOrder || disableUrlParamManagement)
|
|
@@ -265,8 +363,11 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
265
363
|
setSrcAmount,
|
|
266
364
|
dstAmount,
|
|
267
365
|
setDstAmount,
|
|
366
|
+
dstAmountInput,
|
|
367
|
+
setDstAmountInput,
|
|
268
368
|
isSrcInputDirty,
|
|
269
369
|
setIsSrcInputDirty,
|
|
370
|
+
tradeType,
|
|
270
371
|
// Payment methods
|
|
271
372
|
cryptoPaymentMethod,
|
|
272
373
|
setCryptoPaymentMethod,
|
|
@@ -287,8 +388,10 @@ export function useAnyspendFlow({ paymentType = "crypto", recipientAddress, load
|
|
|
287
388
|
// Quote data
|
|
288
389
|
anyspendQuote,
|
|
289
390
|
isLoadingAnyspendQuote,
|
|
391
|
+
isQuoteLoading, // Combined loading state (includes debounce + quote fetching)
|
|
290
392
|
getAnyspendQuoteError,
|
|
291
393
|
activeInputAmountInWei,
|
|
394
|
+
activeOutputAmountInWei, // User's destination amount input in wei (for EXACT_OUTPUT mode)
|
|
292
395
|
// Geo/onramp data
|
|
293
396
|
geoData,
|
|
294
397
|
coinbaseAvailablePaymentMethods,
|