@velora-dex/widget 0.8.1 → 0.8.2
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/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/components/ui/accordion.js.map +1 -1
- package/dist/components/ui/button.js.map +1 -1
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/drawer.js.map +1 -1
- package/dist/components/ui/dropdown-menu.js.map +1 -1
- package/dist/components/ui/input.js.map +1 -1
- package/dist/components/ui/progress.js.map +1 -1
- package/dist/components/ui/skeleton.js.map +1 -1
- package/dist/components/ui/sonner.js.map +1 -1
- package/dist/components/ui/switch.js.map +1 -1
- package/dist/components/ui/tooltip.js.map +1 -1
- package/dist/components/web3/AccountButton.js.map +1 -1
- package/dist/components/web3/ConnectExternalProvider/AutoconnectExternal.js.map +1 -1
- package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.js.map +1 -1
- package/dist/components/web3/ConnectExternalProvider/safeProviderWrapper.js.map +1 -1
- package/dist/components/web3/ConnectExternalProvider/utils.js.map +1 -1
- package/dist/components/web3/ConnectWallets/WalletConnectButtons.js.map +1 -1
- package/dist/components/web3/ConnectWallets/index.js +1 -1
- package/dist/components/web3/ConnectWallets/index.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/button.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/connectRunner.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/iframe.js.map +1 -1
- package/dist/components/web3/ConnectWallets/privy/provider.js.map +1 -1
- package/dist/components/web3/ConnectWallets/walletFlags.js.map +1 -1
- package/dist/components/web3/ConnectWallets/walletIcons.js.map +1 -1
- package/dist/components/web3/ConnectedWallet/ConnectedWallet.js.map +1 -1
- package/dist/components/web3/providers.js.map +1 -1
- package/dist/components/widget/AppHeader/Activities/Activities.js.map +1 -1
- package/dist/components/widget/AppHeader/Activities/ActivitiesScreen.js.map +1 -1
- package/dist/components/widget/AppHeader/Activities/ActivityItems.js.map +1 -1
- package/dist/components/widget/AppHeader/Activities/Drawers.js.map +1 -1
- package/dist/components/widget/AppHeader/Activities/hooks.js.map +1 -1
- package/dist/components/widget/AppHeader/Activities/utils.js.map +1 -1
- package/dist/components/widget/AppHeader/ActivityButton.js.map +1 -1
- package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
- package/dist/components/widget/AppHeader/TradeModeSwitcher.js.map +1 -1
- package/dist/components/widget/AppHeader/state/showMoreAtom.js.map +1 -1
- package/dist/components/widget/BridgeList/BridgeListItem.js.map +1 -1
- package/dist/components/widget/BridgeList/BridgeProtocolsList.js.map +1 -1
- package/dist/components/widget/BridgeList/BridgesList.js.map +1 -1
- package/dist/components/widget/BridgeList/hooks.js.map +1 -1
- package/dist/components/widget/BridgePreferences/BridgePreferences.js.map +1 -1
- package/dist/components/widget/BridgeSelectorExpandable/BridgeSelectorExpandable.js.map +1 -1
- package/dist/components/widget/Button/CancelButton/CancelButton.js.map +1 -1
- package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.js.map +1 -1
- package/dist/components/widget/Button/DismissButton.js.map +1 -1
- package/dist/components/widget/Button/RefreshButton.js.map +1 -1
- package/dist/components/widget/CompareQuotes/CompareQuotes.js.map +1 -1
- package/dist/components/widget/Details/DetailWithTooltip.js.map +1 -1
- package/dist/components/widget/Details/DetailWithValueList.js.map +1 -1
- package/dist/components/widget/Details/DetailWithValueListExpandable.js.map +1 -1
- package/dist/components/widget/Details/SwapDetailsExpandable.js.map +1 -1
- package/dist/components/widget/DexesList/DexItem.js.map +1 -1
- package/dist/components/widget/DexesList/DexesList.js.map +1 -1
- package/dist/components/widget/DexesList/getDexProps.js.map +1 -1
- package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressDialog.js.map +1 -1
- package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressInput.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/AcrossTokenList.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenCloud/index.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow.js.map +1 -1
- package/dist/components/widget/Dialog/SelectTokenDialog/TokenSearch.js.map +1 -1
- package/dist/components/widget/Drawer/Overlay.js.map +1 -1
- package/dist/components/widget/Drawer/index.js.map +1 -1
- package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
- package/dist/components/widget/Duration/Duration.js.map +1 -1
- package/dist/components/widget/Duration/utils.js.map +1 -1
- package/dist/components/widget/EnabledExchanges/EnabledExchanges.js.map +1 -1
- package/dist/components/widget/EnabledExchanges/EnabledExchangesList.js.map +1 -1
- package/dist/components/widget/EnabledList/EnabledList.js.map +1 -1
- package/dist/components/widget/FetchingQuotes/FetchingQuotes.js.map +1 -1
- package/dist/components/widget/Icon/CheckIcon.js.map +1 -1
- package/dist/components/widget/Icon/ChevronIcon.js.map +1 -1
- package/dist/components/widget/Icon/DeltaIcon.js.map +1 -1
- package/dist/components/widget/Icon/EllipseIcon.js.map +1 -1
- package/dist/components/widget/Icon/InfoIcon.js.map +1 -1
- package/dist/components/widget/Icon/MarketIcon.js.map +1 -1
- package/dist/components/widget/Icon/SliderIcon.js.map +1 -1
- package/dist/components/widget/ImportToken/ImportToken.js.map +1 -1
- package/dist/components/widget/ImportToken/useImportTokenDrawer.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js +5 -8
- package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/constants.js.map +1 -1
- package/dist/components/widget/LimitOrderItem/utils.js.map +1 -1
- package/dist/components/widget/LimitPriceInput/index.js +6 -6
- package/dist/components/widget/LimitPriceInput/index.js.map +1 -1
- package/dist/components/widget/Line/Line.js.map +1 -1
- package/dist/components/widget/ListItem/ListItemWithSwitch.js.map +1 -1
- package/dist/components/widget/NetworkIcon/NetworkIconSquare.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/CompactNetworkSwitcher.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/NetworkSwitcherDropdown.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/NetworkSwitcherList.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/common/AllNetworksItem.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/common/NetworkItem.js.map +1 -1
- package/dist/components/widget/NetworkSwitcher/utils/items.js.map +1 -1
- package/dist/components/widget/NetworkWithIcon/NetworkIconWithChevron.js.map +1 -1
- package/dist/components/widget/NetworkWithIcon/NetworkWithIcon.js.map +1 -1
- package/dist/components/widget/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/widget/OrderExpiryInput/index.js.map +1 -1
- package/dist/components/widget/OtcOrderItem/OtcOrderDetails/Controls.js.map +1 -1
- package/dist/components/widget/OtcOrderItem/OtcOrderDetails/OtcOrderDetails.js.map +1 -1
- package/dist/components/widget/OtcOrderItem/OtcOrderDetails/utils.js.map +1 -1
- package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js +5 -8
- package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js.map +1 -1
- package/dist/components/widget/OtcOrderItem/constants.js.map +1 -1
- package/dist/components/widget/OtcOrderItem/utils.js.map +1 -1
- package/dist/components/widget/PayReceiveInfo/PayReceiveInfo.js.map +1 -1
- package/dist/components/widget/PoweredBy/PoweredBy.js.map +1 -1
- package/dist/components/widget/ReceiverAddress/ReceiverAddress.js.map +1 -1
- package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js.map +1 -1
- package/dist/components/widget/ReceiverAddress/state/subscriptions.js.map +1 -1
- package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcControls.js.map +1 -1
- package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcReviewAndConfirm.js.map +1 -1
- package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/utils.js.map +1 -1
- package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js.map +1 -1
- package/dist/components/widget/Screen/GenericScreen.js.map +1 -1
- package/dist/components/widget/Screen/ScreenContainer.js.map +1 -1
- package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
- package/dist/components/widget/SettingsButton/SettingsButton.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/SwapModeSwitcherExpandable.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
- package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js.map +1 -1
- package/dist/components/widget/SwapRate/SwapRate.js.map +1 -1
- package/dist/components/widget/SwapRate/SwapRateWithTooltip.js.map +1 -1
- package/dist/components/widget/SwapRate/utils.js.map +1 -1
- package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js.map +1 -1
- package/dist/components/widget/Tabs/Tabs.js.map +1 -1
- package/dist/components/widget/Toasts/CustomToast.js.map +1 -1
- package/dist/components/widget/TokenBadge/TokenBadge.js.map +1 -1
- package/dist/components/widget/TokenBadge/TokenLink.js.map +1 -1
- package/dist/components/widget/TokenInput/InputContainer.js.map +1 -1
- package/dist/components/widget/TokenInput/InputField.js.map +1 -1
- package/dist/components/widget/TokenInput/InputFooter.js.map +1 -1
- package/dist/components/widget/TokenInput/InputHeader.js.map +1 -1
- package/dist/components/widget/TokenInput/common/Balance.js.map +1 -1
- package/dist/components/widget/TokenInput/common/MaxButtons.js.map +1 -1
- package/dist/components/widget/TokenInput/index.js.map +1 -1
- package/dist/components/widget/TokenSwitcher/TokenSwitcher.js.map +1 -1
- package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.js.map +1 -1
- package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.js.map +1 -1
- package/dist/components/widget/TradeOverview/CancelOrder/utils.js.map +1 -1
- package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/FillOtcOrderTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/OtcOrderTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/Step/Step.js.map +1 -1
- package/dist/components/widget/TradeOverview/Step/utils.js.map +1 -1
- package/dist/components/widget/TradeOverview/Stepper.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/TradeCompletedDetails.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/index.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/useTradeCompleteDetails.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeComplete/utils.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeDetails.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeDetailsDisplay.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeError/TradeErrorFooter.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeError/index.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeError/utils.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeOverviewFooter.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeOverviewHeader.js.map +1 -1
- package/dist/components/widget/TradeOverview/TradeOverviewScreen.js.map +1 -1
- package/dist/components/widget/TradeOverview/TwapOrderTradeOverview.js.map +1 -1
- package/dist/components/widget/TradeOverview/VerticalDash.js.map +1 -1
- package/dist/components/widget/TradeOverview/tradeFlowContext.js.map +1 -1
- package/dist/components/widget/TradeOverview/utils/isNonFlowStep.js.map +1 -1
- package/dist/components/widget/TradeOverview/utils/preWrap.js.map +1 -1
- package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.js.map +1 -1
- package/dist/components/widget/TradeParameters/BridgePreferenceParameters/BridgePreferenceParameters.js.map +1 -1
- package/dist/components/widget/TradeParameters/BridgePreferenceParameters/useDraftBridgePreferencesState.js.map +1 -1
- package/dist/components/widget/TradeParameters/DegenModeConfirmation.js.map +1 -1
- package/dist/components/widget/TradeParameters/DegenModeParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/DeltaParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/EIP1559Parameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/EnabledExchangesParameters/EnabledExchangesParameters.js.map +1 -1
- package/dist/components/widget/TradeParameters/EnabledExchangesParameters/useDraftEnabledExchangesState.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/CustomSlippageInput.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/EditSlippage.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/SlippageParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/SlippageParameter/hooks/useCustomSlippageProps.js.map +1 -1
- package/dist/components/widget/TradeParameters/TradeParameters.js.map +1 -1
- package/dist/components/widget/TradeParameters/TransactionSpeedParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/bridgePreferences/excludeBridgesAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/bridgePreferences/protocolNameAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/bridgePreferences/resetDraftsAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/bridgePreferences/useBridgePreferences.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/enabledExchanges/disabledDexesAtomFamily.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/enabledExchanges/useDisabledDexes.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/slippageParamAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.js.map +1 -1
- package/dist/components/widget/TradeParameters/useTempTradeParameters.js.map +1 -1
- package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.js.map +1 -1
- package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.js.map +1 -1
- package/dist/components/widget/TransactionDetails/LimitOrderDetails/utils.js.map +1 -1
- package/dist/components/widget/TransactionDetails/TransactionListItem.js.map +1 -1
- package/dist/components/widget/TransactionDetails/utils.js.map +1 -1
- package/dist/components/widget/Twap/CustomDurationDrawer.js.map +1 -1
- package/dist/components/widget/Twap/OrderDuration.js.map +1 -1
- package/dist/components/widget/Twap/OrderSplit.js.map +1 -1
- package/dist/components/widget/Twap/RateProtection.js.map +1 -1
- package/dist/components/widget/Twap/TwapDetailWithTooltip.js.map +1 -1
- package/dist/components/widget/Warning/InsufficientBalanceMessage.js.map +1 -1
- package/dist/components/widget/Warning/Warning.js.map +1 -1
- package/dist/components/widget/Warning/WarningMessage.js.map +1 -1
- package/dist/components/widget/WrapEth/WrapEthContent.js.map +1 -1
- package/dist/components/widget/WrapEth/WrapEthDrawerButton.js.map +1 -1
- package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.js.map +1 -1
- package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js.map +1 -1
- package/dist/components/widget/YouGet/YouGet.js.map +1 -1
- package/dist/core/ConnectWalletDrawerButton.js.map +1 -1
- package/dist/core/LimitOrderButton.js.map +1 -1
- package/dist/core/LimitOrderDetails.js.map +1 -1
- package/dist/core/OtcOrderButton.js.map +1 -1
- package/dist/core/OtcOrderDetails.js.map +1 -1
- package/dist/core/Toaster.js.map +1 -1
- package/dist/core/TradeFlowScreenButton.js.map +1 -1
- package/dist/core/TwapDetails.js.map +1 -1
- package/dist/core/Updaters.js.map +1 -1
- package/dist/core/Warnings.js.map +1 -1
- package/dist/core/across/isCrosschainPossible.js.map +1 -1
- package/dist/core/across/utils.js.map +1 -1
- package/dist/core/button/hooks/useWidgetButtonExtraProps.js.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/inputs/hooks/useMaxButtonProps.js.map +1 -1
- package/dist/core/inputs/hooks/useTokenFromInputProps.js.map +1 -1
- package/dist/core/inputs/hooks/useTokenSwitcherProps.js.map +1 -1
- package/dist/core/inputs/hooks/useTokenToInputProps.js.map +1 -1
- package/dist/core/inputs/hooks/useWarningMessage.js.map +1 -1
- package/dist/core/inputs/hooks/utils.js.map +1 -1
- package/dist/core/inputs/state/common.js.map +1 -1
- package/dist/core/inputs/state/inputAmountAtom.js.map +1 -1
- package/dist/core/inputs/state/selectedTokenActionsAtom.js.map +1 -1
- package/dist/core/inputs/state/selectedTokenAtom.js.map +1 -1
- package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
- package/dist/core/inputs/state/subscriptions.js.map +1 -1
- package/dist/core/limit/state/deadlineAtom.js.map +1 -1
- package/dist/core/limit/state/isCrosschainAtom.js.map +1 -1
- package/dist/core/limit/state/limitInputActionsAtom.js.map +1 -1
- package/dist/core/limit/state/limitInputAmountAtom.js.map +1 -1
- package/dist/core/limit/state/receiverAddressAtom.js.map +1 -1
- package/dist/core/limit/state/selectedTokenActionsAtom.js.map +1 -1
- package/dist/core/limit/state/selectedTokenAtom.js.map +1 -1
- package/dist/core/limit/state/utils.js.map +1 -1
- package/dist/core/limit/useLimitDetailsListProps.js.map +1 -1
- package/dist/core/limit/useLimitNotSupported.js.map +1 -1
- package/dist/core/limit/useLimitPriceDifference.js.map +1 -1
- package/dist/core/limit/useLimitPriceInputProps.js.map +1 -1
- package/dist/core/limit/useLimitRate.js.map +1 -1
- package/dist/core/limit/useLimitTokenFromInputProps.js.map +1 -1
- package/dist/core/limit/useLimitTokenSwitcherProps.js.map +1 -1
- package/dist/core/limit/useLimitTokenToInputProps.js.map +1 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/otc/state/deadlineAtom.js.map +1 -1
- package/dist/core/otc/state/otcInputActionsAtom.js.map +1 -1
- package/dist/core/otc/state/otcInputAmountAtom.js.map +1 -1
- package/dist/core/otc/state/receiverAddressAtom.js.map +1 -1
- package/dist/core/otc/state/selectedTokenActionsAtom.js.map +1 -1
- package/dist/core/otc/state/selectedTokenAtom.js.map +1 -1
- package/dist/core/otc/useOtcDetailsListProps.js.map +1 -1
- package/dist/core/otc/useOtcNotSupported.js.map +1 -1
- package/dist/core/otc/useOtcPriceDifference.js.map +1 -1
- package/dist/core/otc/useOtcPriceInputProps.js.map +1 -1
- package/dist/core/otc/useOtcTokenFromInputProps.js.map +1 -1
- package/dist/core/otc/useOtcTokenSwitcherProps.js.map +1 -1
- package/dist/core/otc/useOtcTokenToInputProps.js.map +1 -1
- package/dist/core/screen/hooks/useInitialValue.js.map +1 -1
- package/dist/core/screen/hooks/useOnClickOutside.js.map +1 -1
- package/dist/core/screen/hooks/useResizeObserver.js.map +1 -1
- package/dist/core/screen/hooks/useRunOnMount.js.map +1 -1
- package/dist/core/screen/state/hooks/useScreen.js.map +1 -1
- package/dist/core/screen/state/hooks/useScreenValue.js.map +1 -1
- package/dist/core/screen/state/hooks/useSetScreen.js.map +1 -1
- package/dist/core/screen/state/screenAtom.js.map +1 -1
- package/dist/core/state/apiConfigAtom.js.map +1 -1
- package/dist/core/state/chainToAtom.js.map +1 -1
- package/dist/core/state/configActionsAtom.js.map +1 -1
- package/dist/core/state/configEffectAtom.js.map +1 -1
- package/dist/core/state/containerAtom.js.map +1 -1
- package/dist/core/state/enabledChainsAtom.js.map +1 -1
- package/dist/core/state/enabledTradeModesAtom.js.map +1 -1
- package/dist/core/state/externalProviderAtom.js.map +1 -1
- package/dist/core/state/getSelectableDestChains.js.map +1 -1
- package/dist/core/state/isCrosschainAtom.js.map +1 -1
- package/dist/core/state/tradeModeAtom.js.map +1 -1
- package/dist/core/state/validatedPartnerConfigAtom.js.map +1 -1
- package/dist/core/state/validatedReferrerConfigAtom.js.map +1 -1
- package/dist/core/state/widgetEventsAtom.js.map +1 -1
- package/dist/core/subscriptions.js.map +1 -1
- package/dist/core/swapDetails/fees.js.map +1 -1
- package/dist/core/swapDetails/maxToPay.js.map +1 -1
- package/dist/core/swapDetails/orderRouting.js.map +1 -1
- package/dist/core/swapDetails/priceImpact.js.map +1 -1
- package/dist/core/swapDetails/useSwapDetailsListProps.js.map +1 -1
- package/dist/core/swapDetails/youGet.js.map +1 -1
- package/dist/core/twap/state/isCrosschainAtom.js.map +1 -1
- package/dist/core/twap/state/selectedTokenActionsAtom.js.map +1 -1
- package/dist/core/twap/state/twapInputAmountAtom.js.map +1 -1
- package/dist/core/twap/state/twapParamsAtom.js.map +1 -1
- package/dist/core/twap/state/twapSideAtom.js.map +1 -1
- package/dist/core/twap/twapDetails/minimumReceiveable.js.map +1 -1
- package/dist/core/twap/useTwapDetailsListProps.js.map +1 -1
- package/dist/core/twap/useTwapTokenFromInputProps.js.map +1 -1
- package/dist/core/twap/useTwapTokenSwitcherProps.js.map +1 -1
- package/dist/core/twap/useTwapTokenToInputProps.js.map +1 -1
- package/dist/events/effects/formInput.js.map +1 -1
- package/dist/events/effects/price.js.map +1 -1
- package/dist/events/effects/swapMode.js.map +1 -1
- package/dist/events/getters/limit.js.map +1 -1
- package/dist/events/getters/otc.js.map +1 -1
- package/dist/events/getters/settings.js.map +1 -1
- package/dist/events/getters/swap.js.map +1 -1
- package/dist/events/getters/twap.js.map +1 -1
- package/dist/events/getters/widgetState.js.map +1 -1
- package/dist/events/hooks/useActivateEffects.js.map +1 -1
- package/dist/events/hooks/useOnPriceUpdates.js.map +1 -1
- package/dist/events/hooks/useOnWalletConnect.js.map +1 -1
- package/dist/external/.pnpm/vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__6feb48fe37bd41e9af5c8e81d5a6f4e1/external/vaul/dist/index.js.map +1 -1
- package/dist/hooks/batch/useAwaitCalls.js.map +1 -1
- package/dist/hooks/batch/useBatchWithApproveTxs.js.map +1 -1
- package/dist/hooks/batch/useCanBatchTxs.js.map +1 -1
- package/dist/hooks/batch/useSendBatchTx.js.map +1 -1
- package/dist/hooks/connectors/useIsConnectedSafe.js.map +1 -1
- package/dist/hooks/connectors/useIsGnosisSafeConnector.js.map +1 -1
- package/dist/hooks/connectors/useIsSafeThroughWalletConnect.js.map +1 -1
- package/dist/hooks/gas/useGasPrices.js.map +1 -1
- package/dist/hooks/gas/utils.js.map +1 -1
- package/dist/hooks/getCode/query.js.map +1 -1
- package/dist/hooks/getCode/useIsAccountContract.js.map +1 -1
- package/dist/hooks/getCode/useIsContractAtAddress.js.map +1 -1
- package/dist/hooks/otc/mutations/useCancelLimitOrder.js.map +1 -1
- package/dist/hooks/otc/mutations/useCreateLimitOrder.js.map +1 -1
- package/dist/hooks/otc/mutations/useFillOrder.js.map +1 -1
- package/dist/hooks/otc/mutations/utils.js.map +1 -1
- package/dist/hooks/otc/queries/useLimitOrderRequiredBalance.js.map +1 -1
- package/dist/hooks/otc/queries/useLimitOrders.js.map +1 -1
- package/dist/hooks/otc/tradeFlow/useFillOtcOrderFlow.js.map +1 -1
- package/dist/hooks/otc/tradeFlow/useFillOtcOrderStep.js.map +1 -1
- package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.js.map +1 -1
- package/dist/hooks/otc/tradeFlow/useOtcOrderStep.js.map +1 -1
- package/dist/hooks/permit/hooks/common/useSignArbitraryTypedData.js.map +1 -1
- package/dist/hooks/permit/hooks/common/useSignPermit.js.map +1 -1
- package/dist/hooks/permit/hooks/common/useWalletSupportsPermit.js.map +1 -1
- package/dist/hooks/permit/hooks/permit1/useGetPermitInfo.js.map +1 -1
- package/dist/hooks/permit/hooks/permit1/useGetSafePermitInfo.js.map +1 -1
- package/dist/hooks/permit/hooks/permit1/usePermit1Nonce.js.map +1 -1
- package/dist/hooks/permit/hooks/permit1/useSignTokenPermit1.js.map +1 -1
- package/dist/hooks/permit/hooks/permit1/useTokenFromPermit1Nonce.js.map +1 -1
- package/dist/hooks/permit/hooks/permit1/useTokenFromPermitInfo.js.map +1 -1
- package/dist/hooks/permit/hooks/permit1/useTryToSignPermit1.js.map +1 -1
- package/dist/hooks/permit/hooks/permit2/usePermit2Allowance.js.map +1 -1
- package/dist/hooks/permit/hooks/permit2/usePermit2TransferFromNonce.js.map +1 -1
- package/dist/hooks/permit/hooks/permit2/useSignTokenPermit2TransferFrom.js.map +1 -1
- package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2Allowance.js.map +1 -1
- package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2TransferFromNonce.js.map +1 -1
- package/dist/hooks/permit/utils/constants.js.map +1 -1
- package/dist/hooks/permit/utils/construct.js.map +1 -1
- package/dist/hooks/permit/utils/deadlines.js.map +1 -1
- package/dist/hooks/permit/utils/detect.js.map +1 -1
- package/dist/hooks/permit/utils/domainSeparator.js.map +1 -1
- package/dist/hooks/permit/utils/encodeArgs.js.map +1 -1
- package/dist/hooks/permit/utils/trySignPermit1.js.map +1 -1
- package/dist/hooks/permit/utils/utils.js.map +1 -1
- package/dist/hooks/sdk/useGetContracts.js.map +1 -1
- package/dist/hooks/sdk/useSpender.js.map +1 -1
- package/dist/hooks/swap/prices/delta/bridge/useSelectedBridgePrice.js.map +1 -1
- package/dist/hooks/swap/prices/delta/bridge/utils.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/twap/useCreatePreSignableTwapOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/twap/useCreateTwapOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/twap/useDepositAndSubmitTwapOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/twap/usePostTwapOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/twap/usePreSignAndSubmitTwapOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/twap/useTwapOrderToPost.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/utils.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/unposted/effect.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/unposted/index.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/unposted/storage.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/unposted/utils.d.ts +8 -11
- package/dist/hooks/swap/prices/delta/orders/unposted/utils.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/unposted/utils.js.map +1 -1
- package/dist/hooks/swap/prices/delta/orders/utils.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/bridgeInfo/bridgeInfosLoadedAtom.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/bridgeInfo/common.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/bridgeInfo/getBridgeInfoQueryData.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/bridgeInfo/useBridgeInfo.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/bridgeProtocols/useBridgeProtocols.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/errors.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaOrderPreConditions.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.d.ts +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/factory.js.map +1 -1
- package/dist/hooks/swap/prices/market/mutations/useBuildTx.js.map +1 -1
- package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js.map +1 -1
- package/dist/hooks/swap/prices/market/queries/dexesList/useDexesList.js.map +1 -1
- package/dist/hooks/swap/prices/market/queries/errors.js.map +1 -1
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/market/queries/useSpenderAndContracts.js.map +1 -1
- package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
- package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
- package/dist/hooks/swap/prices/useTokenInputsFromPrice.js.map +1 -1
- package/dist/hooks/swap/prices/useTokenInputsFromTwapPrice.js.map +1 -1
- package/dist/hooks/swap/prices/useTwapPrices.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/errors.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/factory/depositAndSubmitOrderFactory.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/factory/preSignAndSubmitOrderFactory.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/useApproveOrPermitEvents.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/useBatchWrapAndApprove.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/useConstructGasParams.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/useRequiredAllowanceForOrders.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/useSignPermit1Or2.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/common/utils.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useTwapFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useTwapSwapStep.js.map +1 -1
- package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js.map +1 -1
- package/dist/hooks/tokens/allowance/useTokenAllowance.js.map +1 -1
- package/dist/hooks/tokens/allowance/utils.js.map +1 -1
- package/dist/hooks/tokens/balances/queries.js.map +1 -1
- package/dist/hooks/tokens/balances/useAttachTokenBalanceMultichain.js.map +1 -1
- package/dist/hooks/tokens/balances/useInvalidateTokenData.js.map +1 -1
- package/dist/hooks/tokens/balances/useIsInsufficientTokenBalance.js.map +1 -1
- package/dist/hooks/tokens/balances/useIsLimitOrderInsufficientBalance.js.map +1 -1
- package/dist/hooks/tokens/balances/useMultichainTokenBalances.js.map +1 -1
- package/dist/hooks/tokens/balances/useSelectedTokenBalances.js.map +1 -1
- package/dist/hooks/tokens/balances/useTokenBalance.js.map +1 -1
- package/dist/hooks/tokens/data/useCombineTokensWithFetched.js.map +1 -1
- package/dist/hooks/tokens/data/useFetchTokens.js.map +1 -1
- package/dist/hooks/tokens/data/useMultichainTokensData.js.map +1 -1
- package/dist/hooks/tokens/prices/queries.js.map +1 -1
- package/dist/hooks/tokens/prices/useMultichainTokenPrices.js.map +1 -1
- package/dist/hooks/tokens/prices/useTokenPrices.js.map +1 -1
- package/dist/hooks/tokens/useAllTokensWithFilter.js.map +1 -1
- package/dist/hooks/tokens/useNativeToken.js.map +1 -1
- package/dist/hooks/tokens/useTokenTaxFee.js.map +1 -1
- package/dist/hooks/tokens/useTokensByAddress.js.map +1 -1
- package/dist/hooks/tokens/useTokensFromAcross.js.map +1 -1
- package/dist/hooks/txs/mutations/useApprove.js.map +1 -1
- package/dist/hooks/txs/mutations/useDepositWeth.js.map +1 -1
- package/dist/hooks/txs/mutations/useReplaceTx.js.map +1 -1
- package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
- package/dist/hooks/txs/queries/useAccountNonce.js.map +1 -1
- package/dist/hooks/txs/queries/useAwaitTx.js.map +1 -1
- package/dist/hooks/txs/queries/useTxFees.js.map +1 -1
- package/dist/hooks/txs/queries/useTxHistory.js.map +1 -1
- package/dist/hooks/txs/queries/useTxResponse.js.map +1 -1
- package/dist/hooks/txs/queries/useWalletCanReplaceTx.js.map +1 -1
- package/dist/hooks/txs/queries/utils.js.map +1 -1
- package/dist/hooks/useAvailableCrosses.js.map +1 -1
- package/dist/hooks/useBreakpoints.js.map +1 -1
- package/dist/hooks/useBridgeInfo.js.map +1 -1
- package/dist/hooks/useBridgeProtocols.js.map +1 -1
- package/dist/hooks/useCachedQueryError.js.map +1 -1
- package/dist/hooks/useChainMatches.js.map +1 -1
- package/dist/hooks/useClickOutside.js.map +1 -1
- package/dist/hooks/useCurrentChain.js.map +1 -1
- package/dist/hooks/useDebouncedInputState.js.map +1 -1
- package/dist/hooks/useEIP1559Enabled.js.map +1 -1
- package/dist/hooks/useGlobalDeltaEnabled.js.map +1 -1
- package/dist/hooks/useIsCrosschainPossible.js.map +1 -1
- package/dist/hooks/useMinViemClient.js.map +1 -1
- package/dist/hooks/useSDK.js.map +1 -1
- package/dist/hooks/useSelectableDestChains.js.map +1 -1
- package/dist/hooks/useSlippage.js.map +1 -1
- package/dist/hooks/useSwitchChainWithGuard.js.map +1 -1
- package/dist/lib/constants/urls.js.map +1 -1
- package/dist/lib/ipfs.js.map +1 -1
- package/dist/lib/queryClient.js.map +1 -1
- package/dist/lib/tradeMode.js.map +1 -1
- package/dist/lib/utils/approval.js.map +1 -1
- package/dist/lib/utils/atomWithCompare.js.map +1 -1
- package/dist/lib/utils/copyToClipboard.js.map +1 -1
- package/dist/lib/utils/delta.js.map +1 -1
- package/dist/lib/utils/dexes.js.map +1 -1
- package/dist/lib/utils/explorer.js.map +1 -1
- package/dist/lib/utils/fee.js.map +1 -1
- package/dist/lib/utils/formatFiatPrice.js.map +1 -1
- package/dist/lib/utils/formatPercent.js.map +1 -1
- package/dist/lib/utils/formatTokenBalance.js.map +1 -1
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/lib/utils/logger.js.map +1 -1
- package/dist/lib/utils/metabase.js.map +1 -1
- package/dist/lib/utils/mobile.js.map +1 -1
- package/dist/lib/utils/price.js.map +1 -1
- package/dist/lib/utils/priceImpact.js.map +1 -1
- package/dist/lib/utils/providerErrors.js.map +1 -1
- package/dist/lib/utils/rate.js.map +1 -1
- package/dist/lib/utils/removeZeroDecimals.js.map +1 -1
- package/dist/lib/utils/savedAmountUSD.js.map +1 -1
- package/dist/lib/utils/scaleFactor.js.map +1 -1
- package/dist/lib/utils/slippage.js.map +1 -1
- package/dist/lib/utils/time.js.map +1 -1
- package/dist/lib/utils/toDecimal.js.map +1 -1
- package/dist/lib/utils/toasts.js.map +1 -1
- package/dist/lib/utils/tradeFlow.js.map +1 -1
- package/dist/lib/utils/transactionHandlers.js.map +1 -1
- package/dist/lib/utils/tuple.js.map +1 -1
- package/dist/lib/utils/twap.js.map +1 -1
- package/dist/lib/utils/useDateNow.js.map +1 -1
- package/dist/lib/web3/wagmi/config.js.map +1 -1
- package/dist/lib/web3/wagmi/external.js.map +1 -1
- package/dist/lib/web3/wagmi/isInsideSafeIframe.js.map +1 -1
- package/dist/lib/web3/wagmi/switchChain.js.map +1 -1
- package/dist/lib/web3/wagmi/utils.js.map +1 -1
- package/dist/tokens/blacklist.js.map +1 -1
- package/dist/tokens/constructor.js.map +1 -1
- package/dist/tokens/defaultTokens.js.map +1 -1
- package/dist/tokens/hooks.js.map +1 -1
- package/dist/tokens/lists/constants.js.map +1 -1
- package/dist/tokens/lists/download.js.map +1 -1
- package/dist/tokens/lists/state/effects.js.map +1 -1
- package/dist/tokens/lists/state/tokenListsActionsAtom.js.map +1 -1
- package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
- package/dist/tokens/overrides.js.map +1 -1
- package/dist/tokens/queries.js.map +1 -1
- package/dist/tokens/stabeCoins/hooks.js.map +1 -1
- package/dist/tokens/stabeCoins/index.js.map +1 -1
- package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
- package/dist/tokens/state/allTokensByChainAtom.js.map +1 -1
- package/dist/tokens/state/constructTokens.js.map +1 -1
- package/dist/tokens/state/fromListsAtom.js.map +1 -1
- package/dist/tokens/utils/areTokensSame.js.map +1 -1
- package/dist/tokens/utils/brand.js.map +1 -1
- package/dist/tokens/utils/eth.js.map +1 -1
- package/dist/tokens/utils/filtering.js.map +1 -1
- package/dist/tokens/utils/sets.js.map +1 -1
- package/dist/tokens/utils/sorting.js.map +1 -1
- package/dist/tokens/utils/transferAmountsFromReceipt.js.map +1 -1
- package/dist/transactions/hash.js.map +1 -1
- package/dist/transactions/queries/ensureCallsStatus.js.map +1 -1
- package/dist/transactions/queries/ensureEstimateFeesPerGas.js.map +1 -1
- package/dist/transactions/queries/ensureTxReceipt.js.map +1 -1
- package/dist/transactions/queries/ensureTxResponse.js.map +1 -1
- package/dist/transactions/state/effects/finalize.js.map +1 -1
- package/dist/transactions/state/hooks/useActivateEffects.js.map +1 -1
- package/dist/transactions/state/hooks/useMarkTxAsDropped.js.map +1 -1
- package/dist/transactions/state/hooks/useTransactions.js.map +1 -1
- package/dist/transactions/state/transactionsActionAtom.js.map +1 -1
- package/dist/transactions/state/transactionsAtom.js.map +1 -1
- package/dist/transactions/status.js.map +1 -1
- package/dist/transactions/utils.js.map +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLimitOrderFlow.js","names":["useAccount","useChainId","assert","useEnsureTxReceipt","Address","Hash","TransactionReceipt","ApprovalFlowResult","SubmitTxResult","useCreateAndSubmitDeltaOrder","CreateAndSubmitDeltaOrderInput","useMinViemClient","useMutation","useRef","SupportedChainId","UserCancelledError","CallsSentObject","TxSentObject","useApproveOrPermit","useLogger","usePartner","useLimitDeadline","getOverallOrderStatus","useWatchDeltaAuction","useWidgetEvents","shouldApproveOrBatch","usePreSignAndSubmitDeltaOrder","BridgePrice","DEFAULT_DELTA_BRIDGE","useLimitReceiverAddressValue","useDepositAndSubmitDeltaOrder","isETHaddress","useCancelOrWithdrawAndCancelDeltaOrder","CancelDeltaOrdersReturn","DeltaAuctionWithOrder","CancelOrderStepKey","HALF_MINUTE_MS","useReferrer","limitOrderFlowType","UserDefinedLimitPrice","srcTokenAddress","destTokenAddress","srcAmount","destAmount","bridgePrice","UseLimitOrderFlowInput","limitPrice","SubmitLimitOrderResult","tradeFlowType","approve","limitOrder","sentOrder","lastOrderState","account","receiverAddress","OnTxSent","txSent","RunLimitOrderOptions","onTxSent","UseLimitOrderFlowResult","chainId","runLimitOrderFlow","options","Promise","reset","cancelFlow","retryFlow","cancelLimitOrder","approval","limitOrderSubmission","order","isPostingOrder","isCreatingOrder","isOrderSent","isPending","isError","isSuccess","error","Error","limitOrderExecution","isOrderPending","isOrderExecuting","isOrderExecuted","limitOrderCancelation","receipt","txHash","response","isCancelingOrder","isOrderCancellable","isOrderCanceled","step","result","LIMIT_ORDER_MUTATION_KEY","useLimitOrderFlow","logger","approveTxMut","events","approveOrPermitEvents","srcToken","spenderContractType","swapSide","tradeMode","address","minClient","createAndSubmitOrderMut","client","mutationOptions","onSuccess","log","onError","limitOrderCreateAndSubmit","deltaOrderPreSign","canBatchTxs","isConnectedToSafe","preSignAndSubmitDeltaOrder","resetPreSignAndSubmitDeltaOrder","viemClient","deltaOrderDeposit","resetDepositAndSubmitDeltaOrder","depositAndSubmitDeltaOrder","postingOrder","watchOrderExecution","orderId","id","refetchInterval","onAuctionSuccess","onAuctionFailure","onUpdatedAuction","orderStatus","data","isLoading","isRefetching","cancelOrderMut","cancelOrderResponse","ensureTxReceipt","currentAbortControllerRef","AbortController","current","abort","partner","referrerAddress","deadline","onLimitOrder","submitLimitOrder","abortController","signal","approveTxHash","approveTxReceipt","allowanceToSet","shouldDepositAndPreSign","shouldDoApprovalTxOrPermit","shouldDoApprovalTx","shouldPreSignBatch","signPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","throwIfAborted","approveTxReceiptPromise","hash","onReplaced","action","transactionHash","receiptPromise","transactionSpecificData","approvedAmount","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","failed","event","name","params","price","destChainId","bridge","destinationChainId","createOrderInput","type","orderInput","owner","beneficiary","destToken","deltaPrice","protocolSelector","protocolData","partnerFee","orderFromAPI","depositAmount","mutateAsync","cancelDeltaOrder","limitOrderMut","mutationFn","mutationKey","onSettled"],"sources":["../../../../src/hooks/swap/tradeFlow/useLimitOrderFlow.ts"],"sourcesContent":["import { useAccount, useChainId } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport type { Address, Hash, TransactionReceipt } from \"viem\";\nimport type { ApprovalFlowResult, SubmitTxResult } from \"./common/types\";\nimport {\n useCreateAndSubmitDeltaOrder,\n type CreateAndSubmitDeltaOrderInput,\n} from \"../prices/delta/mutations/useCreateDeltaOrder\";\nimport { useMinViemClient } from \"@/hooks/useMinViemClient\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { UserCancelledError } from \"./common/errors\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\n\nimport { useLogger } from \"@/core/logger\";\n\nimport { usePartner } from \"@/hooks/usePartner\";\nimport { useLimitDeadline } from \"@/core/limit/state/deadlineAtom\";\n\nimport { getOverallOrderStatus } from \"../prices/delta/orders/utils\";\nimport { useWatchDeltaAuction } from \"../prices/delta/queries/useWatchDeltaOrder\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport {\n shouldApproveOrBatch,\n usePreSignAndSubmitDeltaOrder,\n} from \"./common/usePreSignAndSubmitDeltaOrder\";\nimport type { BridgePrice } from \"@velora-dex/sdk\";\nimport { DEFAULT_DELTA_BRIDGE } from \"../prices/delta/bridge/const\";\nimport { useLimitReceiverAddressValue } from \"@/core/limit/state/receiverAddressAtom\";\nimport { useDepositAndSubmitDeltaOrder } from \"./common/useDepositAndSubmitDeltaOrder\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { useCancelOrWithdrawAndCancelDeltaOrder } from \"../prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder\";\nimport type { CancelDeltaOrdersReturn } from \"../prices/delta/mutations/useCancelDeltaOrders\";\nimport type { DeltaAuctionWithOrder } from \"../prices/delta/orders/types\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\nimport { HALF_MINUTE_MS } from \"@/lib/constants/time\";\nimport { useReferrer } from \"@/hooks/useReferrer\";\n\nconst limitOrderFlowType = \"limitOrder\";\n\nexport type UserDefinedLimitPrice = {\n srcTokenAddress: string;\n destTokenAddress: string;\n srcAmount: string;\n destAmount: string;\n bridgePrice?: BridgePrice;\n};\n\nexport type UseLimitOrderFlowInput = {\n limitPrice?: UserDefinedLimitPrice;\n};\n\nexport type SubmitLimitOrderResult = {\n tradeFlowType: typeof limitOrderFlowType;\n approve: SubmitTxResult;\n limitOrder: {\n sentOrder: DeltaAuctionWithOrder;\n lastOrderState?: DeltaAuctionWithOrder;\n };\n limitPrice: UserDefinedLimitPrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunLimitOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseLimitOrderFlowResult = {\n tradeFlowType: typeof limitOrderFlowType;\n chainId: SupportedChainId;\n runLimitOrderFlow: (\n options?: RunLimitOrderOptions\n ) => Promise<SubmitLimitOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (\n options?: RunLimitOrderOptions\n ) => Promise<SubmitLimitOrderResult>; // reset and retry flow\n cancelLimitOrder: () => Promise<\n TransactionReceipt | CancelDeltaOrdersReturn | undefined\n >;\n approval: ApprovalFlowResult;\n limitOrderSubmission: {\n order?: DeltaAuctionWithOrder;\n isPostingOrder: boolean;\n isCreatingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n limitOrderExecution: {\n sentOrder?: DeltaAuctionWithOrder;\n lastOrderState?: DeltaAuctionWithOrder;\n isOrderPending: boolean;\n isOrderExecuting: boolean;\n isOrderExecuted: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n limitOrderCancelation: {\n receipt?: TransactionReceipt;\n txHash?: string;\n response?: CancelDeltaOrdersReturn;\n isCancelingOrder: boolean;\n isOrderCancellable: boolean;\n isOrderCanceled: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n step?: CancelOrderStepKey;\n };\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitLimitOrderResult;\n limitPrice?: UserDefinedLimitPrice;\n};\n\nconst LIMIT_ORDER_MUTATION_KEY = \"runLimitOrderFlow\";\n\nexport function useLimitOrderFlow({\n limitPrice,\n}: UseLimitOrderFlowInput): UseLimitOrderFlowResult {\n const logger = useLogger(\"LimitOrderFlow\");\n const chainId = useChainId();\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 3. await Approve tx\n */\n\n const {\n approval,\n approveTxMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: limitPrice?.srcTokenAddress,\n srcAmount: limitPrice?.srcAmount,\n spenderContractType: \"ParaswapDelta\",\n swapSide: \"SELL\",\n tradeMode: \"limit\",\n chainId,\n });\n\n /* 4.1. Build and Submit Delta Order */\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n const createAndSubmitOrderMut = useCreateAndSubmitDeltaOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Limit Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create Limit Order error\", error);\n },\n },\n });\n\n const limitOrderCreateAndSubmit: UseLimitOrderFlowResult[\"limitOrderSubmission\"] =\n {\n order: createAndSubmitOrderMut.order,\n isCreatingOrder: createAndSubmitOrderMut.isCreatingOrder,\n isPostingOrder: createAndSubmitOrderMut.isPostingOrder,\n isOrderSent: createAndSubmitOrderMut.isOrderSent,\n isPending: createAndSubmitOrderMut.isPending,\n isError: createAndSubmitOrderMut.isError,\n isSuccess: createAndSubmitOrderMut.isSuccess,\n error: createAndSubmitOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Delta pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset: resetPreSignAndSubmitDeltaOrder,\n } = usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n const {\n deltaOrderDeposit,\n reset: resetDepositAndSubmitDeltaOrder,\n depositAndSubmitDeltaOrder: depositAndSubmitDeltaOrder,\n } = useDepositAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Delta Order submission for step 4 */\n const limitOrderSubmission: UseLimitOrderFlowResult[\"limitOrderSubmission\"] =\n {\n order:\n limitOrderCreateAndSubmit.order ||\n deltaOrderPreSign.order ||\n deltaOrderDeposit.order,\n isPostingOrder:\n limitOrderCreateAndSubmit.isPostingOrder ||\n deltaOrderPreSign.postingOrder.isPostingOrder ||\n deltaOrderDeposit.postingOrder.isPostingOrder,\n isCreatingOrder:\n limitOrderCreateAndSubmit.isCreatingOrder ||\n deltaOrderPreSign.isCreatingOrder ||\n deltaOrderDeposit.isCreatingOrder,\n isOrderSent:\n limitOrderCreateAndSubmit.isOrderSent ||\n deltaOrderPreSign.isOrderSent ||\n deltaOrderDeposit.isOrderSent,\n isPending:\n limitOrderCreateAndSubmit.isPending ||\n deltaOrderPreSign.isPending ||\n deltaOrderDeposit.isPending,\n isError:\n limitOrderCreateAndSubmit.isError ||\n deltaOrderPreSign.isError ||\n deltaOrderDeposit.isError,\n isSuccess:\n limitOrderCreateAndSubmit.isSuccess ||\n deltaOrderPreSign.isSuccess ||\n deltaOrderDeposit.isSuccess,\n error:\n limitOrderCreateAndSubmit.error ||\n deltaOrderPreSign.error ||\n deltaOrderDeposit.error,\n };\n\n const watchOrderExecution = useWatchDeltaAuction<DeltaAuctionWithOrder>({\n orderId: limitOrderSubmission.order?.id,\n refetchInterval: HALF_MINUTE_MS,\n onAuctionSuccess: (order) => {\n logger.log(\"Limit Order success\", order);\n },\n onAuctionFailure: (order) => {\n logger.log(\"Limit Order failure\", order);\n },\n onUpdatedAuction: (order) => {\n logger.log(\"Limit Order updated\", order);\n },\n });\n\n const orderStatus = watchOrderExecution.data\n ? getOverallOrderStatus(watchOrderExecution.data)\n : null;\n\n const limitOrderExecution: UseLimitOrderFlowResult[\"limitOrderExecution\"] = {\n sentOrder: limitOrderSubmission.order,\n lastOrderState: watchOrderExecution.data,\n isOrderPending: orderStatus === \"pending\",\n isOrderExecuting: orderStatus === \"executing\",\n isOrderExecuted: orderStatus === \"confirmed\",\n isPending:\n watchOrderExecution.isLoading ||\n watchOrderExecution.isRefetching ||\n orderStatus === \"pending\" ||\n orderStatus === \"executing\",\n isError: watchOrderExecution.isError || orderStatus === \"failed\",\n isSuccess: orderStatus === \"confirmed\",\n error: watchOrderExecution.error,\n };\n\n const cancelOrderMut = useCancelOrWithdrawAndCancelDeltaOrder({\n // supply the must up-to-date order for cancellation\n order: limitOrderExecution.lastOrderState || limitOrderExecution.sentOrder,\n chainId,\n account,\n client: minClient,\n logger,\n });\n\n const limitOrderCancelation: UseLimitOrderFlowResult[\"limitOrderCancelation\"] =\n {\n receipt: cancelOrderMut.receipt,\n txHash: cancelOrderMut.txHash,\n response: cancelOrderMut.cancelOrderResponse,\n isCancelingOrder: cancelOrderMut.isPending,\n isOrderCancellable: cancelOrderMut.isOrderCancellable,\n isOrderCanceled: cancelOrderMut.isSuccess,\n isPending: cancelOrderMut.isPending,\n isError: cancelOrderMut.isError,\n isSuccess: cancelOrderMut.isSuccess,\n error: cancelOrderMut.error,\n step: cancelOrderMut.step,\n };\n\n const ensureTxReceipt = useEnsureTxReceipt();\n\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n };\n\n const { partner } = usePartner();\n const { referrerAddress } = useReferrer();\n const receiverAddress = useLimitReceiverAddressValue();\n const deadline = useLimitDeadline();\n\n const { onLimitOrder } = useWidgetEvents();\n\n const submitLimitOrder = async ({\n onTxSent,\n }: RunLimitOrderOptions = {}): Promise<SubmitLimitOrderResult> => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n createAndSubmitOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitDeltaOrder();\n resetDepositAndSubmitDeltaOrder();\n\n // no sense in starting flow without a price data,\n // Otherwise this flow will be stopped by disabling ReviewOrder button in the first place\n assert(limitPrice, \"Limit price data is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the synchronously available price\n const allowanceToSet = approval.allowanceToSet;\n\n const shouldDepositAndPreSign =\n // @TODO [depositNativeAndPreSign] ensureDeltaEthBalance and compare with price.srcAmount to skip the deposit,\n // or deposit the difference between user dETH balance and price.srcAmount to avoid unnecessary deposits\n isETHaddress(limitPrice.srcTokenAddress);\n\n /* \n if connected to Safe, or needs to approve a token with a tx, or needs to pre-wrap ETH\n and can batch txs, then pre-sign the batch;\n that way Safe does only one action (wrapETH?+Approve+setPreSignature batch tx)\n and a wallet that would otherwise potentially wrap ETH and then Approve Token (tx, no Permit for Limit Orders)\n and then sign Order, basically has to make at least one tx, does only one action as well.\n */\n const {\n shouldDoApprovalTxOrPermit: shouldDoApprovalTx,\n shouldPreSignBatch,\n } = shouldApproveOrBatch({\n approval,\n signPermit: {\n isPermitSupported: false,\n isPermitReadyToSign: false,\n },\n canBatchTxs,\n isConnectedToSafe,\n });\n\n try {\n if (shouldDoApprovalTx && allowanceToSet) {\n try {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n } catch (error) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n\n assert(limitPrice, \"limitPrice is not available\");\n\n onLimitOrder?.({\n event: {\n name: \"LimitOrder:request\",\n params: {\n price: limitPrice,\n },\n },\n });\n const bridgePrice = limitPrice.bridgePrice;\n const destChainId = bridgePrice?.bridge.destinationChainId;\n\n let createOrderInput: CreateAndSubmitDeltaOrderInput;\n if (bridgePrice) {\n // crosschain order\n createOrderInput = {\n signal,\n type: \"LIMIT\",\n referrerAddress,\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: limitPrice.srcTokenAddress,\n destToken: limitPrice.destTokenAddress,\n srcAmount: limitPrice.srcAmount,\n destAmount: limitPrice.destAmount,\n destChainId,\n deltaPrice: {\n ...bridgePrice,\n bridge: {\n ...bridgePrice.bridge,\n protocolSelector: DEFAULT_DELTA_BRIDGE.protocolSelector,\n protocolData: DEFAULT_DELTA_BRIDGE.protocolData,\n },\n partner,\n partnerFee: 0,\n },\n partner,\n\n deadline,\n },\n };\n } else {\n // singlechain order\n createOrderInput = {\n signal,\n type: \"LIMIT\",\n referrerAddress,\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: limitPrice.srcTokenAddress,\n srcAmount: limitPrice.srcAmount,\n destToken: limitPrice.destTokenAddress,\n destAmount: limitPrice.destAmount,\n destChainId,\n deltaPrice: {\n destToken: limitPrice.destTokenAddress,\n destAmount: limitPrice.destAmount,\n srcAmount: limitPrice.srcAmount,\n bridge: DEFAULT_DELTA_BRIDGE,\n partner,\n partnerFee: 0,\n },\n partner,\n deadline,\n },\n };\n }\n\n let orderFromAPI: DeltaAuctionWithOrder;\n\n if (shouldDepositAndPreSign) {\n const depositAmount = createOrderInput.orderInput.srcAmount;\n // deposit ETH + depositTx + POST order\n orderFromAPI = await depositAndSubmitDeltaOrder({\n createOrderInput,\n depositAmount,\n onTxSent,\n });\n } else if (shouldPreSignBatch) {\n // creating signing and POSTing the Order all together in one mutation\n // prepare Order for pre-signing and POSTing:\n // 1. builds the order\n // 2. hashes the built order\n // 3. construct DeltaContract.setPreSignature(orderHash, true) tx calldata\n\n orderFromAPI = await preSignAndSubmitDeltaOrder({\n createOrderInput,\n approval,\n onTxSent,\n });\n } else {\n orderFromAPI =\n await createAndSubmitOrderMut.mutateAsync(createOrderInput);\n }\n\n onLimitOrder?.({\n event: {\n name: \"LimitOrder:sent\",\n params: {\n price: limitPrice,\n order: orderFromAPI,\n },\n },\n });\n\n return {\n tradeFlowType: limitOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n limitOrder: {\n sentOrder: orderFromAPI,\n },\n limitPrice: limitPrice,\n account,\n receiverAddress,\n };\n } catch (error) {\n logger.error(\"Order submission error\", error);\n onLimitOrder?.({\n event: {\n name: \"LimitOrder:failed\",\n params: {\n price: limitPrice,\n error: error as Error,\n },\n },\n });\n throw error;\n }\n };\n\n const cancelLimitOrder = async () => {\n try {\n return await cancelOrderMut.cancelDeltaOrder();\n } catch (error) {\n logger.error(\"Cancel Limit order error\", error);\n // allow to re-trigger cancellation after error (like UserCancelledError)\n cancelOrderMut.reset();\n }\n };\n\n const limitOrderMut = useMutation({\n mutationFn: submitLimitOrder,\n mutationKey: [LIMIT_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Order submission success\", data);\n },\n onError: (error) => {\n logger.error(\"Order submission error\", error);\n },\n onSettled: () => {\n logger.log(\"Order submission settled\");\n },\n });\n\n const runLimitOrderFlow = limitOrderMut.mutateAsync;\n\n const reset = () => {\n approveTxMut.reset();\n createAndSubmitOrderMut.reset();\n limitOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitDeltaOrder();\n resetDepositAndSubmitDeltaOrder();\n };\n\n const retryFlow = (\n options?: RunLimitOrderOptions\n ): Promise<SubmitLimitOrderResult> => {\n reset();\n return runLimitOrderFlow(options);\n };\n\n /* 5. return result */\n\n let result: SubmitLimitOrderResult | undefined = limitOrderMut.data;\n if (result && limitOrderExecution.lastOrderState) {\n result = {\n ...result,\n limitOrder: {\n sentOrder: result.limitOrder.sentOrder,\n // lastOrderState may be CANCELLED here\n lastOrderState: limitOrderExecution.lastOrderState,\n },\n };\n }\n\n return {\n tradeFlowType: limitOrderFlowType,\n chainId,\n runLimitOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelLimitOrder,\n approval,\n limitOrderSubmission,\n limitOrderExecution,\n limitOrderCancelation,\n // deltaOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: limitOrderMut.isPending,\n isSuccess: limitOrderSubmission.isSuccess, // approval is an optional step\n isError: limitOrderMut.isError,\n error: limitOrderMut.error,\n result,\n limitPrice,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useLimitOrderFlow.js","names":["useAccount","useChainId","assert","useEnsureTxReceipt","Address","Hash","TransactionReceipt","ApprovalFlowResult","SubmitTxResult","useCreateAndSubmitDeltaOrder","CreateAndSubmitDeltaOrderInput","useMinViemClient","useMutation","useRef","SupportedChainId","UserCancelledError","CallsSentObject","TxSentObject","useApproveOrPermit","useLogger","usePartner","useLimitDeadline","getOverallOrderStatus","useWatchDeltaAuction","useWidgetEvents","shouldApproveOrBatch","usePreSignAndSubmitDeltaOrder","BridgePrice","DEFAULT_DELTA_BRIDGE","useLimitReceiverAddressValue","useDepositAndSubmitDeltaOrder","isETHaddress","useCancelOrWithdrawAndCancelDeltaOrder","CancelDeltaOrdersReturn","DeltaAuctionWithOrder","CancelOrderStepKey","HALF_MINUTE_MS","useReferrer","limitOrderFlowType","UserDefinedLimitPrice","srcTokenAddress","destTokenAddress","srcAmount","destAmount","bridgePrice","UseLimitOrderFlowInput","limitPrice","SubmitLimitOrderResult","tradeFlowType","approve","limitOrder","sentOrder","lastOrderState","account","receiverAddress","OnTxSent","txSent","RunLimitOrderOptions","onTxSent","UseLimitOrderFlowResult","chainId","runLimitOrderFlow","options","Promise","reset","cancelFlow","retryFlow","cancelLimitOrder","approval","limitOrderSubmission","order","isPostingOrder","isCreatingOrder","isOrderSent","isPending","isError","isSuccess","error","Error","limitOrderExecution","isOrderPending","isOrderExecuting","isOrderExecuted","limitOrderCancelation","receipt","txHash","response","isCancelingOrder","isOrderCancellable","isOrderCanceled","step","result","LIMIT_ORDER_MUTATION_KEY","useLimitOrderFlow","logger","approveTxMut","events","approveOrPermitEvents","srcToken","spenderContractType","swapSide","tradeMode","address","minClient","createAndSubmitOrderMut","client","mutationOptions","onSuccess","log","onError","limitOrderCreateAndSubmit","deltaOrderPreSign","canBatchTxs","isConnectedToSafe","preSignAndSubmitDeltaOrder","resetPreSignAndSubmitDeltaOrder","viemClient","deltaOrderDeposit","resetDepositAndSubmitDeltaOrder","depositAndSubmitDeltaOrder","postingOrder","watchOrderExecution","orderId","id","refetchInterval","onAuctionSuccess","onAuctionFailure","onUpdatedAuction","orderStatus","data","isLoading","isRefetching","cancelOrderMut","cancelOrderResponse","ensureTxReceipt","currentAbortControllerRef","AbortController","current","abort","partner","referrerAddress","deadline","onLimitOrder","submitLimitOrder","abortController","signal","approveTxHash","approveTxReceipt","allowanceToSet","shouldDepositAndPreSign","shouldDoApprovalTxOrPermit","shouldDoApprovalTx","shouldPreSignBatch","signPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","throwIfAborted","approveTxReceiptPromise","hash","onReplaced","action","transactionHash","receiptPromise","transactionSpecificData","approvedAmount","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","failed","event","name","params","price","destChainId","bridge","destinationChainId","createOrderInput","type","orderInput","owner","beneficiary","destToken","deltaPrice","protocolSelector","protocolData","partnerFee","orderFromAPI","depositAmount","mutateAsync","cancelDeltaOrder","limitOrderMut","mutationFn","mutationKey","onSettled"],"sources":["../../../../src/hooks/swap/tradeFlow/useLimitOrderFlow.ts"],"sourcesContent":["import { useAccount, useChainId } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport type { Address, Hash, TransactionReceipt } from \"viem\";\nimport type { ApprovalFlowResult, SubmitTxResult } from \"./common/types\";\nimport {\n useCreateAndSubmitDeltaOrder,\n type CreateAndSubmitDeltaOrderInput,\n} from \"../prices/delta/mutations/useCreateDeltaOrder\";\nimport { useMinViemClient } from \"@/hooks/useMinViemClient\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { UserCancelledError } from \"./common/errors\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\n\nimport { useLogger } from \"@/core/logger\";\n\nimport { usePartner } from \"@/hooks/usePartner\";\nimport { useLimitDeadline } from \"@/core/limit/state/deadlineAtom\";\n\nimport { getOverallOrderStatus } from \"../prices/delta/orders/utils\";\nimport { useWatchDeltaAuction } from \"../prices/delta/queries/useWatchDeltaOrder\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport {\n shouldApproveOrBatch,\n usePreSignAndSubmitDeltaOrder,\n} from \"./common/usePreSignAndSubmitDeltaOrder\";\nimport type { BridgePrice } from \"@velora-dex/sdk\";\nimport { DEFAULT_DELTA_BRIDGE } from \"../prices/delta/bridge/const\";\nimport { useLimitReceiverAddressValue } from \"@/core/limit/state/receiverAddressAtom\";\nimport { useDepositAndSubmitDeltaOrder } from \"./common/useDepositAndSubmitDeltaOrder\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { useCancelOrWithdrawAndCancelDeltaOrder } from \"../prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder\";\nimport type { CancelDeltaOrdersReturn } from \"../prices/delta/mutations/useCancelDeltaOrders\";\nimport type { DeltaAuctionWithOrder } from \"../prices/delta/orders/types\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\nimport { HALF_MINUTE_MS } from \"@/lib/constants/time\";\nimport { useReferrer } from \"@/hooks/useReferrer\";\n\nconst limitOrderFlowType = \"limitOrder\";\n\nexport type UserDefinedLimitPrice = {\n srcTokenAddress: string;\n destTokenAddress: string;\n srcAmount: string;\n destAmount: string;\n bridgePrice?: BridgePrice;\n};\n\nexport type UseLimitOrderFlowInput = {\n limitPrice?: UserDefinedLimitPrice;\n};\n\nexport type SubmitLimitOrderResult = {\n tradeFlowType: typeof limitOrderFlowType;\n approve: SubmitTxResult;\n limitOrder: {\n sentOrder: DeltaAuctionWithOrder;\n lastOrderState?: DeltaAuctionWithOrder;\n };\n limitPrice: UserDefinedLimitPrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunLimitOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseLimitOrderFlowResult = {\n tradeFlowType: typeof limitOrderFlowType;\n chainId: SupportedChainId;\n runLimitOrderFlow: (\n options?: RunLimitOrderOptions\n ) => Promise<SubmitLimitOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (\n options?: RunLimitOrderOptions\n ) => Promise<SubmitLimitOrderResult>; // reset and retry flow\n cancelLimitOrder: () => Promise<\n TransactionReceipt | CancelDeltaOrdersReturn | undefined\n >;\n approval: ApprovalFlowResult;\n limitOrderSubmission: {\n order?: DeltaAuctionWithOrder;\n isPostingOrder: boolean;\n isCreatingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n limitOrderExecution: {\n sentOrder?: DeltaAuctionWithOrder;\n lastOrderState?: DeltaAuctionWithOrder;\n isOrderPending: boolean;\n isOrderExecuting: boolean;\n isOrderExecuted: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n limitOrderCancelation: {\n receipt?: TransactionReceipt;\n txHash?: string;\n response?: CancelDeltaOrdersReturn;\n isCancelingOrder: boolean;\n isOrderCancellable: boolean;\n isOrderCanceled: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n step?: CancelOrderStepKey;\n };\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitLimitOrderResult;\n limitPrice?: UserDefinedLimitPrice;\n};\n\nconst LIMIT_ORDER_MUTATION_KEY = \"runLimitOrderFlow\";\n\nexport function useLimitOrderFlow({\n limitPrice,\n}: UseLimitOrderFlowInput): UseLimitOrderFlowResult {\n const logger = useLogger(\"LimitOrderFlow\");\n const chainId = useChainId();\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 3. await Approve tx\n */\n\n const {\n approval,\n approveTxMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: limitPrice?.srcTokenAddress,\n srcAmount: limitPrice?.srcAmount,\n spenderContractType: \"ParaswapDelta\",\n swapSide: \"SELL\",\n tradeMode: \"limit\",\n chainId,\n });\n\n /* 4.1. Build and Submit Delta Order */\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n const createAndSubmitOrderMut = useCreateAndSubmitDeltaOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Limit Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create Limit Order error\", error);\n },\n },\n });\n\n const limitOrderCreateAndSubmit: UseLimitOrderFlowResult[\"limitOrderSubmission\"] =\n {\n order: createAndSubmitOrderMut.order,\n isCreatingOrder: createAndSubmitOrderMut.isCreatingOrder,\n isPostingOrder: createAndSubmitOrderMut.isPostingOrder,\n isOrderSent: createAndSubmitOrderMut.isOrderSent,\n isPending: createAndSubmitOrderMut.isPending,\n isError: createAndSubmitOrderMut.isError,\n isSuccess: createAndSubmitOrderMut.isSuccess,\n error: createAndSubmitOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Delta pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset: resetPreSignAndSubmitDeltaOrder,\n } = usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n const {\n deltaOrderDeposit,\n reset: resetDepositAndSubmitDeltaOrder,\n depositAndSubmitDeltaOrder: depositAndSubmitDeltaOrder,\n } = useDepositAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Delta Order submission for step 4 */\n const limitOrderSubmission: UseLimitOrderFlowResult[\"limitOrderSubmission\"] =\n {\n order:\n limitOrderCreateAndSubmit.order ||\n deltaOrderPreSign.order ||\n deltaOrderDeposit.order,\n isPostingOrder:\n limitOrderCreateAndSubmit.isPostingOrder ||\n deltaOrderPreSign.postingOrder.isPostingOrder ||\n deltaOrderDeposit.postingOrder.isPostingOrder,\n isCreatingOrder:\n limitOrderCreateAndSubmit.isCreatingOrder ||\n deltaOrderPreSign.isCreatingOrder ||\n deltaOrderDeposit.isCreatingOrder,\n isOrderSent:\n limitOrderCreateAndSubmit.isOrderSent ||\n deltaOrderPreSign.isOrderSent ||\n deltaOrderDeposit.isOrderSent,\n isPending:\n limitOrderCreateAndSubmit.isPending ||\n deltaOrderPreSign.isPending ||\n deltaOrderDeposit.isPending,\n isError:\n limitOrderCreateAndSubmit.isError ||\n deltaOrderPreSign.isError ||\n deltaOrderDeposit.isError,\n isSuccess:\n limitOrderCreateAndSubmit.isSuccess ||\n deltaOrderPreSign.isSuccess ||\n deltaOrderDeposit.isSuccess,\n error:\n limitOrderCreateAndSubmit.error ||\n deltaOrderPreSign.error ||\n deltaOrderDeposit.error,\n };\n\n const watchOrderExecution = useWatchDeltaAuction<DeltaAuctionWithOrder>({\n orderId: limitOrderSubmission.order?.id,\n refetchInterval: HALF_MINUTE_MS,\n onAuctionSuccess: (order) => {\n logger.log(\"Limit Order success\", order);\n },\n onAuctionFailure: (order) => {\n logger.log(\"Limit Order failure\", order);\n },\n onUpdatedAuction: (order) => {\n logger.log(\"Limit Order updated\", order);\n },\n });\n\n const orderStatus = watchOrderExecution.data\n ? getOverallOrderStatus(watchOrderExecution.data)\n : null;\n\n const limitOrderExecution: UseLimitOrderFlowResult[\"limitOrderExecution\"] = {\n sentOrder: limitOrderSubmission.order,\n lastOrderState: watchOrderExecution.data,\n isOrderPending: orderStatus === \"pending\",\n isOrderExecuting: orderStatus === \"executing\",\n isOrderExecuted: orderStatus === \"confirmed\",\n isPending:\n watchOrderExecution.isLoading ||\n watchOrderExecution.isRefetching ||\n orderStatus === \"pending\" ||\n orderStatus === \"executing\",\n isError: watchOrderExecution.isError || orderStatus === \"failed\",\n isSuccess: orderStatus === \"confirmed\",\n error: watchOrderExecution.error,\n };\n\n const cancelOrderMut = useCancelOrWithdrawAndCancelDeltaOrder({\n // supply the must up-to-date order for cancellation\n order: limitOrderExecution.lastOrderState || limitOrderExecution.sentOrder,\n chainId,\n account,\n client: minClient,\n logger,\n });\n\n const limitOrderCancelation: UseLimitOrderFlowResult[\"limitOrderCancelation\"] =\n {\n receipt: cancelOrderMut.receipt,\n txHash: cancelOrderMut.txHash,\n response: cancelOrderMut.cancelOrderResponse,\n isCancelingOrder: cancelOrderMut.isPending,\n isOrderCancellable: cancelOrderMut.isOrderCancellable,\n isOrderCanceled: cancelOrderMut.isSuccess,\n isPending: cancelOrderMut.isPending,\n isError: cancelOrderMut.isError,\n isSuccess: cancelOrderMut.isSuccess,\n error: cancelOrderMut.error,\n step: cancelOrderMut.step,\n };\n\n const ensureTxReceipt = useEnsureTxReceipt();\n\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n };\n\n const { partner } = usePartner();\n const { referrerAddress } = useReferrer();\n const receiverAddress = useLimitReceiverAddressValue();\n const deadline = useLimitDeadline();\n\n const { onLimitOrder } = useWidgetEvents();\n\n const submitLimitOrder = async ({\n onTxSent,\n }: RunLimitOrderOptions = {}): Promise<SubmitLimitOrderResult> => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n createAndSubmitOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitDeltaOrder();\n resetDepositAndSubmitDeltaOrder();\n\n // no sense in starting flow without a price data,\n // Otherwise this flow will be stopped by disabling ReviewOrder button in the first place\n assert(limitPrice, \"Limit price data is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the synchronously available price\n const allowanceToSet = approval.allowanceToSet;\n\n const shouldDepositAndPreSign =\n // @TODO [depositNativeAndPreSign] ensureDeltaEthBalance and compare with price.srcAmount to skip the deposit,\n // or deposit the difference between user dETH balance and price.srcAmount to avoid unnecessary deposits\n isETHaddress(limitPrice.srcTokenAddress);\n\n /* \n if connected to Safe, or needs to approve a token with a tx, or needs to pre-wrap ETH\n and can batch txs, then pre-sign the batch;\n that way Safe does only one action (wrapETH?+Approve+setPreSignature batch tx)\n and a wallet that would otherwise potentially wrap ETH and then Approve Token (tx, no Permit for Limit Orders)\n and then sign Order, basically has to make at least one tx, does only one action as well.\n */\n const {\n shouldDoApprovalTxOrPermit: shouldDoApprovalTx,\n shouldPreSignBatch,\n } = shouldApproveOrBatch({\n approval,\n signPermit: {\n isPermitSupported: false,\n isPermitReadyToSign: false,\n },\n canBatchTxs,\n isConnectedToSafe,\n });\n\n try {\n if (shouldDoApprovalTx && allowanceToSet) {\n try {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n } catch (error) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n\n assert(limitPrice, \"limitPrice is not available\");\n\n onLimitOrder?.({\n event: {\n name: \"LimitOrder:request\",\n params: {\n price: limitPrice,\n },\n },\n });\n const bridgePrice = limitPrice.bridgePrice;\n const destChainId = bridgePrice?.bridge.destinationChainId;\n\n let createOrderInput: CreateAndSubmitDeltaOrderInput;\n if (bridgePrice) {\n // crosschain order\n createOrderInput = {\n signal,\n type: \"LIMIT\",\n referrerAddress,\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: limitPrice.srcTokenAddress,\n destToken: limitPrice.destTokenAddress,\n srcAmount: limitPrice.srcAmount,\n destAmount: limitPrice.destAmount,\n destChainId,\n deltaPrice: {\n ...bridgePrice,\n bridge: {\n ...bridgePrice.bridge,\n protocolSelector: DEFAULT_DELTA_BRIDGE.protocolSelector,\n protocolData: DEFAULT_DELTA_BRIDGE.protocolData,\n },\n partner,\n partnerFee: 0,\n },\n partner,\n\n deadline,\n },\n };\n } else {\n // singlechain order\n createOrderInput = {\n signal,\n type: \"LIMIT\",\n referrerAddress,\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: limitPrice.srcTokenAddress,\n srcAmount: limitPrice.srcAmount,\n destToken: limitPrice.destTokenAddress,\n destAmount: limitPrice.destAmount,\n destChainId,\n deltaPrice: {\n destToken: limitPrice.destTokenAddress,\n destAmount: limitPrice.destAmount,\n srcAmount: limitPrice.srcAmount,\n bridge: DEFAULT_DELTA_BRIDGE,\n partner,\n partnerFee: 0,\n },\n partner,\n deadline,\n },\n };\n }\n\n let orderFromAPI: DeltaAuctionWithOrder;\n\n if (shouldDepositAndPreSign) {\n const depositAmount = createOrderInput.orderInput.srcAmount;\n // deposit ETH + depositTx + POST order\n orderFromAPI = await depositAndSubmitDeltaOrder({\n createOrderInput,\n depositAmount,\n onTxSent,\n });\n } else if (shouldPreSignBatch) {\n // creating signing and POSTing the Order all together in one mutation\n // prepare Order for pre-signing and POSTing:\n // 1. builds the order\n // 2. hashes the built order\n // 3. construct DeltaContract.setPreSignature(orderHash, true) tx calldata\n\n orderFromAPI = await preSignAndSubmitDeltaOrder({\n createOrderInput,\n approval,\n onTxSent,\n });\n } else {\n orderFromAPI =\n await createAndSubmitOrderMut.mutateAsync(createOrderInput);\n }\n\n onLimitOrder?.({\n event: {\n name: \"LimitOrder:sent\",\n params: {\n price: limitPrice,\n order: orderFromAPI,\n },\n },\n });\n\n return {\n tradeFlowType: limitOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n limitOrder: {\n sentOrder: orderFromAPI,\n },\n limitPrice: limitPrice,\n account,\n receiverAddress,\n };\n } catch (error) {\n logger.error(\"Order submission error\", error);\n onLimitOrder?.({\n event: {\n name: \"LimitOrder:failed\",\n params: {\n price: limitPrice,\n error: error as Error,\n },\n },\n });\n throw error;\n }\n };\n\n const cancelLimitOrder = async () => {\n try {\n return await cancelOrderMut.cancelDeltaOrder();\n } catch (error) {\n logger.error(\"Cancel Limit order error\", error);\n // allow to re-trigger cancellation after error (like UserCancelledError)\n cancelOrderMut.reset();\n }\n };\n\n const limitOrderMut = useMutation({\n mutationFn: submitLimitOrder,\n mutationKey: [LIMIT_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Order submission success\", data);\n },\n onError: (error) => {\n logger.error(\"Order submission error\", error);\n },\n onSettled: () => {\n logger.log(\"Order submission settled\");\n },\n });\n\n const runLimitOrderFlow = limitOrderMut.mutateAsync;\n\n const reset = () => {\n approveTxMut.reset();\n createAndSubmitOrderMut.reset();\n limitOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitDeltaOrder();\n resetDepositAndSubmitDeltaOrder();\n };\n\n const retryFlow = (\n options?: RunLimitOrderOptions\n ): Promise<SubmitLimitOrderResult> => {\n reset();\n return runLimitOrderFlow(options);\n };\n\n /* 5. return result */\n\n let result: SubmitLimitOrderResult | undefined = limitOrderMut.data;\n if (result && limitOrderExecution.lastOrderState) {\n result = {\n ...result,\n limitOrder: {\n sentOrder: result.limitOrder.sentOrder,\n // lastOrderState may be CANCELLED here\n lastOrderState: limitOrderExecution.lastOrderState,\n },\n };\n }\n\n return {\n tradeFlowType: limitOrderFlowType,\n chainId,\n runLimitOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelLimitOrder,\n approval,\n limitOrderSubmission,\n limitOrderExecution,\n limitOrderCancelation,\n // deltaOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: limitOrderMut.isPending,\n isSuccess: limitOrderSubmission.isSuccess, // approval is an optional step\n isError: limitOrderMut.isError,\n error: limitOrderMut.error,\n result,\n limitPrice,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLimitOrderStep.js","names":["CancelOrderStepKey","LimitOrderStep","LimitOrderStepKey","useLimitOrderFlow","UseLimitOrderFlowInput","UseLimitOrderFlowResult","useLogger","constructExplorerOrderDetailsLink","isUserCancelledError","UseLimitOrderStepResult","startLimitOrder","cancelLimitOrder","reset","cancelFlow","retryFlow","isFlowCancellable","isOrderCancellable","step","orderCancellationStep","explorerLink","error","Error","erroredStep","result","tradeFlowType","useLimitOrderStep","options","$","_c","logger","limitOrderFlow","runLimitOrderFlow","once","approvalHappeningOrNeverHappened","approval","isPending","isSuccess","needsApproval","limitOrderSubmission","approvalHappened","txHash","approvalIsStarted","key","subStep","isTxPending","isOrderBeingSigned","isPostingOrder","limitOrderCancelation","orderId","order","id","undefined","log","t0","isError","t1"],"sources":["../../../../src/hooks/swap/tradeFlow/useLimitOrderStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n LimitOrderStep,\n LimitOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useLimitOrderFlow,\n type UseLimitOrderFlowInput,\n type UseLimitOrderFlowResult,\n} from \"./useLimitOrderFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { constructExplorerOrderDetailsLink } from \"@/lib/utils/explorer\";\nimport { isUserCancelledError } from \"./common/errors\";\n\ntype UseLimitOrderStepResult = {\n startLimitOrder: UseLimitOrderFlowResult[\"runLimitOrderFlow\"];\n cancelLimitOrder: UseLimitOrderFlowResult[\"cancelLimitOrder\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseLimitOrderFlowResult[\"reset\"];\n cancelFlow: UseLimitOrderFlowResult[\"cancelFlow\"];\n retryFlow: UseLimitOrderFlowResult[\"retryFlow\"];\n isFlowCancellable: boolean;\n isOrderCancellable: boolean;\n step?: LimitOrderStep;\n orderCancellationStep?: CancelOrderStepKey;\n explorerLink?: string;\n error: Error | null;\n erroredStep?: LimitOrderStepKey;\n result?: UseLimitOrderFlowResult[\"result\"];\n tradeFlowType: UseLimitOrderFlowResult[\"tradeFlowType\"];\n};\n\nexport function useLimitOrderStep(\n options: UseLimitOrderFlowInput\n): UseLimitOrderStepResult {\n const logger = useLogger(\"LimitOrderStep\");\n const limitOrderFlow = useLimitOrderFlow(options);\n\n const startLimitOrder = limitOrderFlow.runLimitOrderFlow;\n const reset = limitOrderFlow.reset;\n const cancelFlow = limitOrderFlow.cancelFlow;\n const retryFlow = limitOrderFlow.retryFlow;\n\n let step: LimitOrderStep | undefined;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n limitOrderFlow.approval.isPending || !limitOrderFlow.approval.isSuccess;\n\n if (\n limitOrderFlow.approval.needsApproval &&\n approvalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (limitOrderFlow.limitOrderSubmission.isPending) {\n const approvalHappened = !!limitOrderFlow.approval.txHash;\n\n step = {\n key: \"signature\",\n subStep: approvalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (limitOrderFlow.isPending) {\n // if something is between steps but not clear step,\n // then assume we're at the standalone signature sub-step\n step = { key: \"signature\", subStep: \"standalone-order-signature\" };\n }\n\n const approvalIsStarted =\n step?.key === \"signature\" &&\n step.subStep === \"approval-signature\" &&\n limitOrderFlow.approval.isTxPending;\n\n const isOrderBeingSigned =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const isPostingOrder = limitOrderFlow.limitOrderSubmission.isPostingOrder;\n\n const isFlowCancellable =\n // final Order is not yet submitted, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n (approvalIsStarted || isOrderBeingSigned) && !isPostingOrder;\n\n const isOrderCancellable =\n limitOrderFlow.limitOrderCancelation.isOrderCancellable;\n\n const orderId = limitOrderFlow.limitOrderSubmission.order?.id;\n const explorerLink = orderId\n ? constructExplorerOrderDetailsLink(orderId)\n : undefined;\n\n logger.once.log(\"step\", step, limitOrderFlow, {\n isFlowCancellable,\n explorerLink,\n orderId,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(limitOrderFlow.error)\n ? null\n : limitOrderFlow.error;\n\n let erroredStep: LimitOrderStepKey | undefined;\n\n if (limitOrderFlow.isError) {\n if (limitOrderFlow.approval.isError) {\n erroredStep = \"signature\";\n } else if (limitOrderFlow.limitOrderSubmission.isError) {\n erroredStep = \"order-submission\";\n }\n }\n\n return {\n startLimitOrder,\n cancelLimitOrder: limitOrderFlow.cancelLimitOrder,\n reset, // @TODO it maybe makes sense to reset mutation data when TradeOverflow drawer is closed\n // if we ever depend on mutation.result when Drawer is not closed,\n // otherwise the result sticks around until remount or next mutation start\n cancelFlow,\n retryFlow,\n isFlowCancellable,\n isOrderCancellable,\n step,\n orderCancellationStep: limitOrderFlow.limitOrderCancelation.step,\n explorerLink,\n error,\n erroredStep,\n result: limitOrderFlow.result,\n tradeFlowType: limitOrderFlow.tradeFlowType,\n };\n}\n"],"mappings":";;;;;;AAgCA,SAAOyB,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAGLC,IAAevB,EAAU,iBAAiB,EAC1CwB,IAAuB3B,EAAkBuB,EAAQ,EAEjDhB,IAAwBoB,EAAcC,mBACtCnB,IAAckB,EAAclB,OAC5BC,IAAmBiB,EAAcjB,YACjCC,IAAkBgB,EAAchB,WAAWK,GAAAJ,GAAAC,GAAAC;
|
|
1
|
+
{"version":3,"file":"useLimitOrderStep.js","names":["CancelOrderStepKey","LimitOrderStep","LimitOrderStepKey","useLimitOrderFlow","UseLimitOrderFlowInput","UseLimitOrderFlowResult","useLogger","constructExplorerOrderDetailsLink","isUserCancelledError","UseLimitOrderStepResult","startLimitOrder","cancelLimitOrder","reset","cancelFlow","retryFlow","isFlowCancellable","isOrderCancellable","step","orderCancellationStep","explorerLink","error","Error","erroredStep","result","tradeFlowType","useLimitOrderStep","options","$","_c","logger","limitOrderFlow","runLimitOrderFlow","once","approvalHappeningOrNeverHappened","approval","isPending","isSuccess","needsApproval","limitOrderSubmission","approvalHappened","txHash","approvalIsStarted","key","subStep","isTxPending","isOrderBeingSigned","isPostingOrder","limitOrderCancelation","orderId","order","id","undefined","log","t0","isError","t1"],"sources":["../../../../src/hooks/swap/tradeFlow/useLimitOrderStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n LimitOrderStep,\n LimitOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useLimitOrderFlow,\n type UseLimitOrderFlowInput,\n type UseLimitOrderFlowResult,\n} from \"./useLimitOrderFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { constructExplorerOrderDetailsLink } from \"@/lib/utils/explorer\";\nimport { isUserCancelledError } from \"./common/errors\";\n\ntype UseLimitOrderStepResult = {\n startLimitOrder: UseLimitOrderFlowResult[\"runLimitOrderFlow\"];\n cancelLimitOrder: UseLimitOrderFlowResult[\"cancelLimitOrder\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseLimitOrderFlowResult[\"reset\"];\n cancelFlow: UseLimitOrderFlowResult[\"cancelFlow\"];\n retryFlow: UseLimitOrderFlowResult[\"retryFlow\"];\n isFlowCancellable: boolean;\n isOrderCancellable: boolean;\n step?: LimitOrderStep;\n orderCancellationStep?: CancelOrderStepKey;\n explorerLink?: string;\n error: Error | null;\n erroredStep?: LimitOrderStepKey;\n result?: UseLimitOrderFlowResult[\"result\"];\n tradeFlowType: UseLimitOrderFlowResult[\"tradeFlowType\"];\n};\n\nexport function useLimitOrderStep(\n options: UseLimitOrderFlowInput\n): UseLimitOrderStepResult {\n const logger = useLogger(\"LimitOrderStep\");\n const limitOrderFlow = useLimitOrderFlow(options);\n\n const startLimitOrder = limitOrderFlow.runLimitOrderFlow;\n const reset = limitOrderFlow.reset;\n const cancelFlow = limitOrderFlow.cancelFlow;\n const retryFlow = limitOrderFlow.retryFlow;\n\n let step: LimitOrderStep | undefined;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n limitOrderFlow.approval.isPending || !limitOrderFlow.approval.isSuccess;\n\n if (\n limitOrderFlow.approval.needsApproval &&\n approvalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (limitOrderFlow.limitOrderSubmission.isPending) {\n const approvalHappened = !!limitOrderFlow.approval.txHash;\n\n step = {\n key: \"signature\",\n subStep: approvalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (limitOrderFlow.isPending) {\n // if something is between steps but not clear step,\n // then assume we're at the standalone signature sub-step\n step = { key: \"signature\", subStep: \"standalone-order-signature\" };\n }\n\n const approvalIsStarted =\n step?.key === \"signature\" &&\n step.subStep === \"approval-signature\" &&\n limitOrderFlow.approval.isTxPending;\n\n const isOrderBeingSigned =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const isPostingOrder = limitOrderFlow.limitOrderSubmission.isPostingOrder;\n\n const isFlowCancellable =\n // final Order is not yet submitted, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n (approvalIsStarted || isOrderBeingSigned) && !isPostingOrder;\n\n const isOrderCancellable =\n limitOrderFlow.limitOrderCancelation.isOrderCancellable;\n\n const orderId = limitOrderFlow.limitOrderSubmission.order?.id;\n const explorerLink = orderId\n ? constructExplorerOrderDetailsLink(orderId)\n : undefined;\n\n logger.once.log(\"step\", step, limitOrderFlow, {\n isFlowCancellable,\n explorerLink,\n orderId,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(limitOrderFlow.error)\n ? null\n : limitOrderFlow.error;\n\n let erroredStep: LimitOrderStepKey | undefined;\n\n if (limitOrderFlow.isError) {\n if (limitOrderFlow.approval.isError) {\n erroredStep = \"signature\";\n } else if (limitOrderFlow.limitOrderSubmission.isError) {\n erroredStep = \"order-submission\";\n }\n }\n\n return {\n startLimitOrder,\n cancelLimitOrder: limitOrderFlow.cancelLimitOrder,\n reset, // @TODO it maybe makes sense to reset mutation data when TradeOverflow drawer is closed\n // if we ever depend on mutation.result when Drawer is not closed,\n // otherwise the result sticks around until remount or next mutation start\n cancelFlow,\n retryFlow,\n isFlowCancellable,\n isOrderCancellable,\n step,\n orderCancellationStep: limitOrderFlow.limitOrderCancelation.step,\n explorerLink,\n error,\n erroredStep,\n result: limitOrderFlow.result,\n tradeFlowType: limitOrderFlow.tradeFlowType,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarketFlow.js","names":["useAwaitTx","OptimalRate","useAccount","useSendMarketSwapTx","useBuildTx","BuildMarketSwapTxInput","assert","useEnsureTxReceipt","Address","Hash","Hex","TransactionReceipt","ApprovalFlowResult","SignPermitFlowResult","SubmitTxResult","applySlippage","useSlippage","useMutation","useRef","SupportedChainId","isTransactionCancelledError","TransactionCancelledError","UserCancelledError","useSwapReceiverAddressValue","CallsSentObject","TxSentObject","useSwapSide","useApproveOrPermit","useMarkPermit1Or2NonceAsUsed","SignedPermitResult","useLogger","useConstructGasParams","useMarketPriceQuery","useSubscribeToMarketPrice","usePartner","useSendBatchTx","useCanBatchTxs","useAwaitCalls","useEnsureCallsStatus","CallsReceipt","useBatchWithApproveTxs","useWidgetEvents","BatchTxStepResult","useExtraMarketPriceParams","usePricesParams","useReplaceTx","ReplaceTxResult","CancelOrderStepKey","useReferrer","UseMarketFlowInput","marketPrice","MarketSwapRequest","swapTxInput","srcAmount","destAmount","marketSwapFlowType","SubmitSwapResult","tradeFlowType","approve","swap","swapRequest","account","receiverAddress","OnTxSent","txSent","RunMarketOptions","onTxSent","UseMarketFlowResult","chainId","runMarketSwapFlow","options","Promise","reset","cancelFlow","retryFlow","approval","signPermit","buildTxParams","isPending","isError","isSuccess","error","Error","txHash","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isTxMined","isTxAwaitingError","isTxCancellable","cancelSwapTx","cancellingState","result","step","swapBatch","usedPrice","freshPrice","submittedSwapRequest","MARKET_SWAP_MUTATION_KEY","useMarketFlow","_marketPrice","logger","resolvedSlippage","swapSideFromInput","priceParams","extraPriceParams","marketPriceQuery","queryKey","marketPriceQueryKey","query","enabled","data","approveTxMut","signPermitMut","events","approveOrPermitEvents","srcToken","spenderContractType","swapSide","side","tradeMode","buildTxMut","mutationOptions","onSuccess","log","onError","sendSwapTxMut","forCurrentChain","canBatchTxs","addTxWithApprovals","batchTxMut","swapTxMined","hash","batchTxMined","id","cancelSwapTxMut","cancelTxType","details","onSwap","event","name","params","swapMode","cancelTxDetails","currentAbortControllerRef","AbortController","replaceTx","action","replacementTxReceipt","status","current","abort","isLoading","isWalletSupported","lastCallsReceipt","receipts","length","callsId","transactionHash","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","address","ensureTxReceipt","ensureCallsStatus","usingPriceRef","markNonceAsUsed","clearNonce","constructGasParams","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","referrerAddress","subscribeToPrice","submitSwapTx","lastPrice","abortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldBatchTxs","needsApproval","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","BigInt","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","onReplaced","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","marketPriceToUse","gasParams","userAddress","receiver","destToken","srcDecimals","destDecimals","takeSurplus","referrer","priceRoute","swapTxOptions","ignoreGasEstimate","ignoreAllowance","degenMode","txParams","mutateAsync","swapTxHash","swapCallsId","price","calls","txsParams","to","from","approveProps","sendCallsResult","sendCalls","sendTransactionAsync","signedPermitData","swapCallsReceipt","swapTxReceipt","sendCallsReceiptPromise","then","source","srcTokenAddress","destTokenAddress","srcAmountUSD","srcUSD","destAmountUSD","destUSD","gasCost","callsReceipt","swapTxReceiptPromise","txCancelledPromise","_","reject","onabort","txReceiptOrCancelledPromise","race","gasCostUSD","marketSwapMut","mutationFn","mutationKey","onSettled"],"sources":["../../../../src/hooks/swap/tradeFlow/useMarketFlow.ts"],"sourcesContent":["import { useAwaitTx } from \"@/hooks/txs\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { useSendMarketSwapTx } from \"../prices/market/mutations/useSendMarketSwapTx\";\nimport {\n useBuildTx,\n type BuildMarketSwapTxInput,\n} from \"../prices/market/mutations/useBuildTx\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport {\n type Address,\n type Hash,\n type Hex,\n type TransactionReceipt,\n} from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport {\n isTransactionCancelledError,\n TransactionCancelledError,\n UserCancelledError,\n} from \"./common/errors\";\nimport { useSwapReceiverAddressValue } from \"@/components/widget/ReceiverAddress/state/receiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport { useConstructGasParams } from \"./common/useConstructGasParams\";\nimport {\n useMarketPriceQuery,\n useSubscribeToMarketPrice,\n} from \"../prices/market/queries/useMarketPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\n\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { type CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport type { BatchTxStepResult } from \"./common/types\";\nimport {\n useExtraMarketPriceParams,\n usePricesParams,\n} from \"../prices/usePricesParams\";\nimport {\n useReplaceTx,\n type ReplaceTxResult,\n} from \"@/hooks/txs/mutations/useReplaceTx\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\nimport { useReferrer } from \"@/hooks/useReferrer\";\n\nexport type UseMarketFlowInput = {\n marketPrice?: OptimalRate;\n};\n\nexport type MarketSwapRequest = BuildMarketSwapTxInput & {\n // narrow down BuildMarketSwapTxInput from \"any two present\" {srcAmount?, destAmount?, slippage?}\n // to \"amounts always present\" variant\n swapTxInput: { srcAmount: string; destAmount: string };\n};\n\nconst marketSwapFlowType = \"marketSwap\";\n\nexport type SubmitSwapResult = {\n tradeFlowType: typeof marketSwapFlowType;\n approve: SubmitTxResult;\n swap: SubmitTxResult & { swapRequest?: MarketSwapRequest };\n marketPrice: OptimalRate;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt}) when mined,\n// maybe??\ntype RunMarketOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseMarketFlowResult = {\n tradeFlowType: typeof marketSwapFlowType;\n chainId: SupportedChainId;\n runMarketSwapFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n buildTxParams: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swap: {\n txHash?: Hash;\n receipt?: TransactionReceipt;\n isConfirmingTX: boolean;\n isConfirmingTxError: boolean;\n isTxSent: boolean;\n isTxPending: boolean;\n isTxMined: boolean;\n isTxAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n isTxCancellable: boolean;\n cancelSwapTx: () => Promise<ReplaceTxResult | undefined>;\n cancellingState: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n result?: ReplaceTxResult;\n step?: CancelOrderStepKey;\n };\n error: Error | null;\n };\n swapBatch: BatchTxStepResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitSwapResult;\n usedPrice?: OptimalRate;\n freshPrice?: OptimalRate;\n submittedSwapRequest?: MarketSwapRequest;\n};\n\nconst MARKET_SWAP_MUTATION_KEY = \"runMarketSwapFlow\";\n\nexport function useMarketFlow({\n marketPrice: _marketPrice,\n}: UseMarketFlowInput): UseMarketFlowResult {\n const logger = useLogger(\"MarketFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n const swapSideFromInput = useSwapSide();\n\n const { priceParams, chainId } = usePricesParams(\"swap\");\n const extraPriceParams = useExtraMarketPriceParams();\n\n const { result: marketPriceQuery, queryKey: marketPriceQueryKey } =\n useMarketPriceQuery({\n priceParams: {\n ...priceParams,\n ...extraPriceParams,\n },\n chainId,\n query: {\n enabled: false,\n },\n });\n\n const marketPrice = marketPriceQuery.data || _marketPrice;\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 2.2. sign Permit1 \n\n 3. await Approve tx (if not using Permit) \n */\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: marketPrice?.srcToken,\n // if we already approved some amount, save it in approval and signPermit objects\n srcAmount: marketPrice?.srcAmount,\n spenderContractType: \"AugustusSwapper\",\n // marketPrice is the preferred source of truth\n swapSide: marketPrice?.side ?? swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4. Build Swap tx */\n const buildTxMut = useBuildTx({\n chainId,\n mutationOptions: {\n onSuccess: () => {\n logger.log(\"Build tx success\");\n },\n onError: (error) => {\n logger.error(\"Build tx error\", error);\n },\n },\n });\n\n const buildTxParams: UseMarketFlowResult[\"buildTxParams\"] = {\n isPending: buildTxMut.isPending,\n isError: buildTxMut.isError,\n isSuccess: buildTxMut.isSuccess,\n error: buildTxMut.error,\n };\n\n /* 5. submit Swap tx */\n\n /* 5.1. submit standalone Swap tx */\n\n const sendSwapTxMut = useSendMarketSwapTx({\n onSuccess: () => {\n logger.log(\"Swap tx success\");\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n });\n\n /* 5.2. submit Batch tx */\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 6. await Swap tx */\n\n /* 6.1. await standalone Swap tx */\n const swapTxMined = useAwaitTx({\n hash: sendSwapTxMut.txHash,\n chainId,\n });\n\n /* 6.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const cancelSwapTxMut = useReplaceTx({\n chainId,\n txHash: sendSwapTxMut.txHash,\n cancelTxType: \"SWAP\",\n onSuccess: (details) => {\n onSwap?.({\n event: {\n name: \"Swap:cancelled\",\n params: {\n swapMode: \"market\",\n cancelTxDetails: details,\n },\n },\n });\n },\n });\n\n // allows to abort (cancel) currently running flow,\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n\n const cancelSwapTx = async () => {\n try {\n assert(sendSwapTxMut.txHash, \"Swap tx hash is not available\");\n const result = await cancelSwapTxMut.replaceTx({\n action: \"cancel\",\n hash: sendSwapTxMut.txHash,\n });\n if (result.replacementTxReceipt.status === \"success\") {\n currentAbortControllerRef.current?.abort(\n new TransactionCancelledError(\"Swap tx cancelled\", result)\n );\n }\n return result;\n } catch (error) {\n logger.error(\"Cancel swap tx error\", error);\n // allow to re-trigger cancellation after error (like UserCancelledError)\n cancelSwapTxMut.reset();\n }\n };\n\n const swap: UseMarketFlowResult[\"swap\"] = {\n txHash: sendSwapTxMut.txHash,\n receipt: swapTxMined.data,\n /* tx sending */\n isConfirmingTX: sendSwapTxMut.isPending,\n isConfirmingTxError: sendSwapTxMut.isError,\n isTxSent: sendSwapTxMut.isSuccess,\n /* tx awaiting */\n isTxPending: swapTxMined.isLoading,\n isTxMined: swapTxMined.isSuccess,\n isTxAwaitingError: swapTxMined.isError,\n /* combined */\n isPending: sendSwapTxMut.isPending || swapTxMined.isLoading,\n isSuccess: swapTxMined.isSuccess, // final success\n isError: sendSwapTxMut.isError || swapTxMined.isError,\n error: sendSwapTxMut.error || swapTxMined.error,\n isTxCancellable:\n cancelSwapTxMut.isWalletSupported &&\n // allow to retry cancel (no !cancelSwapTxMut.isPending check) if the Cancel tx is slow\n !!sendSwapTxMut.txHash &&\n !swapTxMined.data &&\n !cancelSwapTxMut.isSuccess,\n cancelSwapTx,\n cancellingState: {\n isPending: cancelSwapTxMut.isPending,\n isError: cancelSwapTxMut.isError,\n isSuccess: cancelSwapTxMut.isSuccess,\n error: cancelSwapTxMut.error,\n result: cancelSwapTxMut.result,\n step: cancelSwapTxMut.step,\n },\n };\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const swapBatch: UseMarketFlowResult[\"swapBatch\"] = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n const { address: account } = useAccount();\n\n const ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\n\n const usingPriceRef = useRef<OptimalRate | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { constructGasParams } = useConstructGasParams();\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n const { referrerAddress } = useReferrer();\n const subscribeToPrice = useSubscribeToMarketPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitSwapTx: (\n options?: RunMarketOptions & { lastPrice?: OptimalRate | null }\n ) => Promise<SubmitSwapResult> = async ({ onTxSent, lastPrice } = {}) => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n cancelSwapTxMut.reset();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and deltaPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(marketPrice, \"Market price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the synchronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // marketPrice here is the starting price, available before async code and waiting\n let freshPrice = marketPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Swap tx, because it failed the last time,\n // but the price hasn't updated yet, so force refetch\n const newPriceResult = await marketPriceQuery.refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const queryKey = marketPriceQueryKey;\n\n // should always be available\n if (queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey,\n onData: (newPrice) => {\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n // slightly higher amount if BUY with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n newPrice.side\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n // Token doesn't support Permit\n // make an Approval tx\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n } else {\n approveOrPermitEvents.onSignPermit.request({\n allowanceToSet: allowanceToPermit,\n });\n\n // sign Permit\n signedPermitResult = await signPermitMut.signPermitAsync({\n value: allowanceToPermit,\n });\n\n approveOrPermitEvents.onSignPermit.confirmed({\n allowanceToSet: allowanceToPermit,\n permit: signedPermitResult?.permitEncodedArgs,\n });\n }\n } catch (error) {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n } else {\n approveOrPermitEvents.onSignPermit.failed({\n allowanceToSet: allowanceToPermit,\n error: error as Error,\n });\n }\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const marketPriceToUse = freshPrice;\n usingPriceRef.current = marketPriceToUse;\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(marketPriceToUse, \"Market price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: marketPriceToUse.srcAmount,\n destAmount: marketPriceToUse.destAmount,\n },\n resolvedSlippage,\n marketPriceToUse.side\n );\n\n // fresh gas params\n const gasParams = constructGasParams();\n\n const swapRequest: MarketSwapRequest = {\n swapTxInput: {\n userAddress: account,\n receiver: receiverAddress,\n srcToken: marketPriceToUse.srcToken,\n destToken: marketPriceToUse.destToken,\n srcDecimals: marketPriceToUse.srcDecimals,\n destDecimals: marketPriceToUse.destDecimals,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n takeSurplus: partnerTakesSurplus,\n referrer: referrerAddress,\n\n permit: signedPermitResult?.permitEncodedArgs, // just signed Permit signature\n\n priceRoute: marketPriceToUse,\n ...amountsAfterSlippage,\n },\n\n swapTxOptions: {\n // ignoreChecks: true,\n // gas estimate will break if only swap tx is estimated, but approve tx is not considered in a batch\n ignoreGasEstimate: shouldBatchTxs,\n // for Batch-capable wallets batch Approve+Swap tx have to ignore all checks\n ignoreAllowance: shouldBatchTxs,\n // onlyParams: true,\n degenMode: priceParams.degenMode,\n ...gasParams,\n },\n };\n\n const txParams = await buildTxMut.mutateAsync(swapRequest);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n let swapTxHash: Hash | undefined;\n let swapCallsId: string | undefined;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n },\n },\n });\n\n if (shouldBatchTxs) {\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: txParams.to as Address,\n account: txParams.from as Address,\n data: txParams.data as Hex,\n value: BigInt(txParams.value),\n chainId: txParams.chainId,\n },\n ],\n approveProps: [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ],\n });\n\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n swapCallsId = sendCallsResult.id;\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsId: swapCallsId,\n },\n },\n });\n } else {\n swapTxHash = await sendSwapTxMut.sendTransactionAsync({\n ...txParams,\n chainId,\n });\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txHash: swapTxHash,\n },\n },\n });\n }\n\n // no use aborting past this point, tx is already sent,\n // but we may want to connect this late abortion to tx cancellation, in the future\n\n // tx is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n let swapCallsReceipt: CallsReceipt | undefined;\n let swapTxReceipt: TransactionReceipt | undefined;\n\n if (swapCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: swapCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ swapTx ~ awaiting calls id :\", swapCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n callsId: swapCallsId,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n swapSide: marketPriceToUse.side,\n },\n });\n }\n\n swapCallsReceipt = await sendCallsReceiptPromise;\n\n if (swapCallsReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsReceipt: swapCallsReceipt,\n callsId: swapCallsId,\n },\n },\n });\n }\n } else if (swapTxHash) {\n const swapTxReceiptPromise = ensureTxReceipt({\n hash: swapTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:swapTx\", swapTxHash, data);\n },\n });\n\n logger.log(\"~ swapTx ~ awaiting tx hash :\", swapTxHash);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n // watch for signal to potentially get aborted after a cancel tx is mined\n const txCancelledPromise = new Promise<never>((_, reject) => {\n signal.onabort = () => {\n try {\n signal.throwIfAborted();\n } catch (error) {\n if (isTransactionCancelledError(error)) {\n reject(error);\n }\n }\n };\n });\n\n // whichever happens first:\n // - original swap tx is mined (not reverted) and swapTxReceiptPromise resolves\n // - the abort signal fires (e.g. after a cancel/replace tx is mined) and the race rejects\n // if the original tx is replaced/cancelled, ensureTxReceipt will never resolve (or reject if given a timeout)\n const txReceiptOrCancelledPromise = Promise.race([\n swapTxReceiptPromise,\n txCancelledPromise,\n ]);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n transactionHash: swapTxHash,\n receiptPromise: txReceiptOrCancelledPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n gasCostUSD: marketPriceToUse.gasCostUSD,\n swapSide: marketPriceToUse.side,\n },\n });\n }\n\n swapTxReceipt = await txReceiptOrCancelledPromise;\n\n if (swapTxReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txReceipt: swapTxReceipt,\n txHash: swapTxHash,\n },\n },\n });\n }\n }\n\n logger.log(\"~ swapTx ~ receipt:\", swapCallsReceipt || swapTxReceipt);\n\n return {\n tradeFlowType: marketSwapFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n swap: {\n swapRequest,\n callsId: swapCallsId,\n txHash: swapTxHash,\n receipt: swapTxReceipt,\n callsReceipt: swapCallsReceipt,\n },\n marketPrice: marketPriceToUse,\n // @TODO add whatever else may be relevant\n account,\n receiverAddress,\n };\n } catch (error) {\n // Market swap failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n // or even Order in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n\n if (!isTransactionCancelledError(error)) {\n // Swap:cancelled event is handled in cancelSwapTxMut.onSuccess\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"market\",\n error: error as Error,\n },\n },\n });\n }\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const marketSwapMut = useMutation({\n mutationFn: submitSwapTx,\n mutationKey: [MARKET_SWAP_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Swap tx success\", data);\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n onSettled: () => {\n logger.log(\"Swap tx settled\");\n },\n });\n\n const runMarketSwapFlow = marketSwapMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n marketSwapMut.reset();\n\n cancelSwapTxMut.reset();\n };\n\n const retryFlow = (options?: RunMarketOptions): Promise<SubmitSwapResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runMarketSwapFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice = usingPriceRef.current || marketPrice;\n\n const result = marketSwapMut.data;\n const submittedSwapRequest = result?.swap.swapRequest;\n\n /* 7. return result */\n return {\n tradeFlowType: marketSwapFlowType,\n chainId,\n runMarketSwapFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n buildTxParams,\n swap,\n swapBatch,\n // marketSwapMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: marketSwapMut.isPending,\n isSuccess: marketSwapMut.isSuccess,\n isError: marketSwapMut.isError,\n error: marketSwapMut.error,\n result: marketSwapMut.data,\n usedPrice,\n freshPrice: marketPrice,\n submittedSwapRequest,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useMarketFlow.js","names":["useAwaitTx","OptimalRate","useAccount","useSendMarketSwapTx","useBuildTx","BuildMarketSwapTxInput","assert","useEnsureTxReceipt","Address","Hash","Hex","TransactionReceipt","ApprovalFlowResult","SignPermitFlowResult","SubmitTxResult","applySlippage","useSlippage","useMutation","useRef","SupportedChainId","isTransactionCancelledError","TransactionCancelledError","UserCancelledError","useSwapReceiverAddressValue","CallsSentObject","TxSentObject","useSwapSide","useApproveOrPermit","useMarkPermit1Or2NonceAsUsed","SignedPermitResult","useLogger","useConstructGasParams","useMarketPriceQuery","useSubscribeToMarketPrice","usePartner","useSendBatchTx","useCanBatchTxs","useAwaitCalls","useEnsureCallsStatus","CallsReceipt","useBatchWithApproveTxs","useWidgetEvents","BatchTxStepResult","useExtraMarketPriceParams","usePricesParams","useReplaceTx","ReplaceTxResult","CancelOrderStepKey","useReferrer","UseMarketFlowInput","marketPrice","MarketSwapRequest","swapTxInput","srcAmount","destAmount","marketSwapFlowType","SubmitSwapResult","tradeFlowType","approve","swap","swapRequest","account","receiverAddress","OnTxSent","txSent","RunMarketOptions","onTxSent","UseMarketFlowResult","chainId","runMarketSwapFlow","options","Promise","reset","cancelFlow","retryFlow","approval","signPermit","buildTxParams","isPending","isError","isSuccess","error","Error","txHash","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isTxMined","isTxAwaitingError","isTxCancellable","cancelSwapTx","cancellingState","result","step","swapBatch","usedPrice","freshPrice","submittedSwapRequest","MARKET_SWAP_MUTATION_KEY","useMarketFlow","_marketPrice","logger","resolvedSlippage","swapSideFromInput","priceParams","extraPriceParams","marketPriceQuery","queryKey","marketPriceQueryKey","query","enabled","data","approveTxMut","signPermitMut","events","approveOrPermitEvents","srcToken","spenderContractType","swapSide","side","tradeMode","buildTxMut","mutationOptions","onSuccess","log","onError","sendSwapTxMut","forCurrentChain","canBatchTxs","addTxWithApprovals","batchTxMut","swapTxMined","hash","batchTxMined","id","cancelSwapTxMut","cancelTxType","details","onSwap","event","name","params","swapMode","cancelTxDetails","currentAbortControllerRef","AbortController","replaceTx","action","replacementTxReceipt","status","current","abort","isLoading","isWalletSupported","lastCallsReceipt","receipts","length","callsId","transactionHash","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","address","ensureTxReceipt","ensureCallsStatus","usingPriceRef","markNonceAsUsed","clearNonce","constructGasParams","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","referrerAddress","subscribeToPrice","submitSwapTx","lastPrice","abortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldBatchTxs","needsApproval","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","BigInt","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","onReplaced","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","marketPriceToUse","gasParams","userAddress","receiver","destToken","srcDecimals","destDecimals","takeSurplus","referrer","priceRoute","swapTxOptions","ignoreGasEstimate","ignoreAllowance","degenMode","txParams","mutateAsync","swapTxHash","swapCallsId","price","calls","txsParams","to","from","approveProps","sendCallsResult","sendCalls","sendTransactionAsync","signedPermitData","swapCallsReceipt","swapTxReceipt","sendCallsReceiptPromise","then","source","srcTokenAddress","destTokenAddress","srcAmountUSD","srcUSD","destAmountUSD","destUSD","gasCost","callsReceipt","swapTxReceiptPromise","txCancelledPromise","_","reject","onabort","txReceiptOrCancelledPromise","race","gasCostUSD","marketSwapMut","mutationFn","mutationKey","onSettled"],"sources":["../../../../src/hooks/swap/tradeFlow/useMarketFlow.ts"],"sourcesContent":["import { useAwaitTx } from \"@/hooks/txs\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { useSendMarketSwapTx } from \"../prices/market/mutations/useSendMarketSwapTx\";\nimport {\n useBuildTx,\n type BuildMarketSwapTxInput,\n} from \"../prices/market/mutations/useBuildTx\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport {\n type Address,\n type Hash,\n type Hex,\n type TransactionReceipt,\n} from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport {\n isTransactionCancelledError,\n TransactionCancelledError,\n UserCancelledError,\n} from \"./common/errors\";\nimport { useSwapReceiverAddressValue } from \"@/components/widget/ReceiverAddress/state/receiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport { useConstructGasParams } from \"./common/useConstructGasParams\";\nimport {\n useMarketPriceQuery,\n useSubscribeToMarketPrice,\n} from \"../prices/market/queries/useMarketPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\n\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { type CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport type { BatchTxStepResult } from \"./common/types\";\nimport {\n useExtraMarketPriceParams,\n usePricesParams,\n} from \"../prices/usePricesParams\";\nimport {\n useReplaceTx,\n type ReplaceTxResult,\n} from \"@/hooks/txs/mutations/useReplaceTx\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\nimport { useReferrer } from \"@/hooks/useReferrer\";\n\nexport type UseMarketFlowInput = {\n marketPrice?: OptimalRate;\n};\n\nexport type MarketSwapRequest = BuildMarketSwapTxInput & {\n // narrow down BuildMarketSwapTxInput from \"any two present\" {srcAmount?, destAmount?, slippage?}\n // to \"amounts always present\" variant\n swapTxInput: { srcAmount: string; destAmount: string };\n};\n\nconst marketSwapFlowType = \"marketSwap\";\n\nexport type SubmitSwapResult = {\n tradeFlowType: typeof marketSwapFlowType;\n approve: SubmitTxResult;\n swap: SubmitTxResult & { swapRequest?: MarketSwapRequest };\n marketPrice: OptimalRate;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt}) when mined,\n// maybe??\ntype RunMarketOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseMarketFlowResult = {\n tradeFlowType: typeof marketSwapFlowType;\n chainId: SupportedChainId;\n runMarketSwapFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n buildTxParams: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swap: {\n txHash?: Hash;\n receipt?: TransactionReceipt;\n isConfirmingTX: boolean;\n isConfirmingTxError: boolean;\n isTxSent: boolean;\n isTxPending: boolean;\n isTxMined: boolean;\n isTxAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n isTxCancellable: boolean;\n cancelSwapTx: () => Promise<ReplaceTxResult | undefined>;\n cancellingState: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n result?: ReplaceTxResult;\n step?: CancelOrderStepKey;\n };\n error: Error | null;\n };\n swapBatch: BatchTxStepResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitSwapResult;\n usedPrice?: OptimalRate;\n freshPrice?: OptimalRate;\n submittedSwapRequest?: MarketSwapRequest;\n};\n\nconst MARKET_SWAP_MUTATION_KEY = \"runMarketSwapFlow\";\n\nexport function useMarketFlow({\n marketPrice: _marketPrice,\n}: UseMarketFlowInput): UseMarketFlowResult {\n const logger = useLogger(\"MarketFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n const swapSideFromInput = useSwapSide();\n\n const { priceParams, chainId } = usePricesParams(\"swap\");\n const extraPriceParams = useExtraMarketPriceParams();\n\n const { result: marketPriceQuery, queryKey: marketPriceQueryKey } =\n useMarketPriceQuery({\n priceParams: {\n ...priceParams,\n ...extraPriceParams,\n },\n chainId,\n query: {\n enabled: false,\n },\n });\n\n const marketPrice = marketPriceQuery.data || _marketPrice;\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 2.2. sign Permit1 \n\n 3. await Approve tx (if not using Permit) \n */\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: marketPrice?.srcToken,\n // if we already approved some amount, save it in approval and signPermit objects\n srcAmount: marketPrice?.srcAmount,\n spenderContractType: \"AugustusSwapper\",\n // marketPrice is the preferred source of truth\n swapSide: marketPrice?.side ?? swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4. Build Swap tx */\n const buildTxMut = useBuildTx({\n chainId,\n mutationOptions: {\n onSuccess: () => {\n logger.log(\"Build tx success\");\n },\n onError: (error) => {\n logger.error(\"Build tx error\", error);\n },\n },\n });\n\n const buildTxParams: UseMarketFlowResult[\"buildTxParams\"] = {\n isPending: buildTxMut.isPending,\n isError: buildTxMut.isError,\n isSuccess: buildTxMut.isSuccess,\n error: buildTxMut.error,\n };\n\n /* 5. submit Swap tx */\n\n /* 5.1. submit standalone Swap tx */\n\n const sendSwapTxMut = useSendMarketSwapTx({\n onSuccess: () => {\n logger.log(\"Swap tx success\");\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n });\n\n /* 5.2. submit Batch tx */\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 6. await Swap tx */\n\n /* 6.1. await standalone Swap tx */\n const swapTxMined = useAwaitTx({\n hash: sendSwapTxMut.txHash,\n chainId,\n });\n\n /* 6.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const cancelSwapTxMut = useReplaceTx({\n chainId,\n txHash: sendSwapTxMut.txHash,\n cancelTxType: \"SWAP\",\n onSuccess: (details) => {\n onSwap?.({\n event: {\n name: \"Swap:cancelled\",\n params: {\n swapMode: \"market\",\n cancelTxDetails: details,\n },\n },\n });\n },\n });\n\n // allows to abort (cancel) currently running flow,\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n\n const cancelSwapTx = async () => {\n try {\n assert(sendSwapTxMut.txHash, \"Swap tx hash is not available\");\n const result = await cancelSwapTxMut.replaceTx({\n action: \"cancel\",\n hash: sendSwapTxMut.txHash,\n });\n if (result.replacementTxReceipt.status === \"success\") {\n currentAbortControllerRef.current?.abort(\n new TransactionCancelledError(\"Swap tx cancelled\", result)\n );\n }\n return result;\n } catch (error) {\n logger.error(\"Cancel swap tx error\", error);\n // allow to re-trigger cancellation after error (like UserCancelledError)\n cancelSwapTxMut.reset();\n }\n };\n\n const swap: UseMarketFlowResult[\"swap\"] = {\n txHash: sendSwapTxMut.txHash,\n receipt: swapTxMined.data,\n /* tx sending */\n isConfirmingTX: sendSwapTxMut.isPending,\n isConfirmingTxError: sendSwapTxMut.isError,\n isTxSent: sendSwapTxMut.isSuccess,\n /* tx awaiting */\n isTxPending: swapTxMined.isLoading,\n isTxMined: swapTxMined.isSuccess,\n isTxAwaitingError: swapTxMined.isError,\n /* combined */\n isPending: sendSwapTxMut.isPending || swapTxMined.isLoading,\n isSuccess: swapTxMined.isSuccess, // final success\n isError: sendSwapTxMut.isError || swapTxMined.isError,\n error: sendSwapTxMut.error || swapTxMined.error,\n isTxCancellable:\n cancelSwapTxMut.isWalletSupported &&\n // allow to retry cancel (no !cancelSwapTxMut.isPending check) if the Cancel tx is slow\n !!sendSwapTxMut.txHash &&\n !swapTxMined.data &&\n !cancelSwapTxMut.isSuccess,\n cancelSwapTx,\n cancellingState: {\n isPending: cancelSwapTxMut.isPending,\n isError: cancelSwapTxMut.isError,\n isSuccess: cancelSwapTxMut.isSuccess,\n error: cancelSwapTxMut.error,\n result: cancelSwapTxMut.result,\n step: cancelSwapTxMut.step,\n },\n };\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const swapBatch: UseMarketFlowResult[\"swapBatch\"] = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n const { address: account } = useAccount();\n\n const ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\n\n const usingPriceRef = useRef<OptimalRate | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { constructGasParams } = useConstructGasParams();\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n const { referrerAddress } = useReferrer();\n const subscribeToPrice = useSubscribeToMarketPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitSwapTx: (\n options?: RunMarketOptions & { lastPrice?: OptimalRate | null }\n ) => Promise<SubmitSwapResult> = async ({ onTxSent, lastPrice } = {}) => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n cancelSwapTxMut.reset();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and deltaPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(marketPrice, \"Market price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the synchronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // marketPrice here is the starting price, available before async code and waiting\n let freshPrice = marketPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Swap tx, because it failed the last time,\n // but the price hasn't updated yet, so force refetch\n const newPriceResult = await marketPriceQuery.refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const queryKey = marketPriceQueryKey;\n\n // should always be available\n if (queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey,\n onData: (newPrice) => {\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n // slightly higher amount if BUY with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n newPrice.side\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n // Token doesn't support Permit\n // make an Approval tx\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n } else {\n approveOrPermitEvents.onSignPermit.request({\n allowanceToSet: allowanceToPermit,\n });\n\n // sign Permit\n signedPermitResult = await signPermitMut.signPermitAsync({\n value: allowanceToPermit,\n });\n\n approveOrPermitEvents.onSignPermit.confirmed({\n allowanceToSet: allowanceToPermit,\n permit: signedPermitResult?.permitEncodedArgs,\n });\n }\n } catch (error) {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n } else {\n approveOrPermitEvents.onSignPermit.failed({\n allowanceToSet: allowanceToPermit,\n error: error as Error,\n });\n }\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const marketPriceToUse = freshPrice;\n usingPriceRef.current = marketPriceToUse;\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(marketPriceToUse, \"Market price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: marketPriceToUse.srcAmount,\n destAmount: marketPriceToUse.destAmount,\n },\n resolvedSlippage,\n marketPriceToUse.side\n );\n\n // fresh gas params\n const gasParams = constructGasParams();\n\n const swapRequest: MarketSwapRequest = {\n swapTxInput: {\n userAddress: account,\n receiver: receiverAddress,\n srcToken: marketPriceToUse.srcToken,\n destToken: marketPriceToUse.destToken,\n srcDecimals: marketPriceToUse.srcDecimals,\n destDecimals: marketPriceToUse.destDecimals,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n takeSurplus: partnerTakesSurplus,\n referrer: referrerAddress,\n\n permit: signedPermitResult?.permitEncodedArgs, // just signed Permit signature\n\n priceRoute: marketPriceToUse,\n ...amountsAfterSlippage,\n },\n\n swapTxOptions: {\n // ignoreChecks: true,\n // gas estimate will break if only swap tx is estimated, but approve tx is not considered in a batch\n ignoreGasEstimate: shouldBatchTxs,\n // for Batch-capable wallets batch Approve+Swap tx have to ignore all checks\n ignoreAllowance: shouldBatchTxs,\n // onlyParams: true,\n degenMode: priceParams.degenMode,\n ...gasParams,\n },\n };\n\n const txParams = await buildTxMut.mutateAsync(swapRequest);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n let swapTxHash: Hash | undefined;\n let swapCallsId: string | undefined;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n },\n },\n });\n\n if (shouldBatchTxs) {\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: txParams.to as Address,\n account: txParams.from as Address,\n data: txParams.data as Hex,\n value: BigInt(txParams.value),\n chainId: txParams.chainId,\n },\n ],\n approveProps: [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ],\n });\n\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n swapCallsId = sendCallsResult.id;\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsId: swapCallsId,\n },\n },\n });\n } else {\n swapTxHash = await sendSwapTxMut.sendTransactionAsync({\n ...txParams,\n chainId,\n });\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txHash: swapTxHash,\n },\n },\n });\n }\n\n // no use aborting past this point, tx is already sent,\n // but we may want to connect this late abortion to tx cancellation, in the future\n\n // tx is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n let swapCallsReceipt: CallsReceipt | undefined;\n let swapTxReceipt: TransactionReceipt | undefined;\n\n if (swapCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: swapCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ swapTx ~ awaiting calls id :\", swapCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n callsId: swapCallsId,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n swapSide: marketPriceToUse.side,\n },\n });\n }\n\n swapCallsReceipt = await sendCallsReceiptPromise;\n\n if (swapCallsReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsReceipt: swapCallsReceipt,\n callsId: swapCallsId,\n },\n },\n });\n }\n } else if (swapTxHash) {\n const swapTxReceiptPromise = ensureTxReceipt({\n hash: swapTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:swapTx\", swapTxHash, data);\n },\n });\n\n logger.log(\"~ swapTx ~ awaiting tx hash :\", swapTxHash);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n // watch for signal to potentially get aborted after a cancel tx is mined\n const txCancelledPromise = new Promise<never>((_, reject) => {\n signal.onabort = () => {\n try {\n signal.throwIfAborted();\n } catch (error) {\n if (isTransactionCancelledError(error)) {\n reject(error);\n }\n }\n };\n });\n\n // whichever happens first:\n // - original swap tx is mined (not reverted) and swapTxReceiptPromise resolves\n // - the abort signal fires (e.g. after a cancel/replace tx is mined) and the race rejects\n // if the original tx is replaced/cancelled, ensureTxReceipt will never resolve (or reject if given a timeout)\n const txReceiptOrCancelledPromise = Promise.race([\n swapTxReceiptPromise,\n txCancelledPromise,\n ]);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n transactionHash: swapTxHash,\n receiptPromise: txReceiptOrCancelledPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n gasCostUSD: marketPriceToUse.gasCostUSD,\n swapSide: marketPriceToUse.side,\n },\n });\n }\n\n swapTxReceipt = await txReceiptOrCancelledPromise;\n\n if (swapTxReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txReceipt: swapTxReceipt,\n txHash: swapTxHash,\n },\n },\n });\n }\n }\n\n logger.log(\"~ swapTx ~ receipt:\", swapCallsReceipt || swapTxReceipt);\n\n return {\n tradeFlowType: marketSwapFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n swap: {\n swapRequest,\n callsId: swapCallsId,\n txHash: swapTxHash,\n receipt: swapTxReceipt,\n callsReceipt: swapCallsReceipt,\n },\n marketPrice: marketPriceToUse,\n // @TODO add whatever else may be relevant\n account,\n receiverAddress,\n };\n } catch (error) {\n // Market swap failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n // or even Order in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n\n if (!isTransactionCancelledError(error)) {\n // Swap:cancelled event is handled in cancelSwapTxMut.onSuccess\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"market\",\n error: error as Error,\n },\n },\n });\n }\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const marketSwapMut = useMutation({\n mutationFn: submitSwapTx,\n mutationKey: [MARKET_SWAP_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Swap tx success\", data);\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n onSettled: () => {\n logger.log(\"Swap tx settled\");\n },\n });\n\n const runMarketSwapFlow = marketSwapMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n marketSwapMut.reset();\n\n cancelSwapTxMut.reset();\n };\n\n const retryFlow = (options?: RunMarketOptions): Promise<SubmitSwapResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runMarketSwapFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice = usingPriceRef.current || marketPrice;\n\n const result = marketSwapMut.data;\n const submittedSwapRequest = result?.swap.swapRequest;\n\n /* 7. return result */\n return {\n tradeFlowType: marketSwapFlowType,\n chainId,\n runMarketSwapFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n buildTxParams,\n swap,\n swapBatch,\n // marketSwapMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: marketSwapMut.isPending,\n isSuccess: marketSwapMut.isSuccess,\n isError: marketSwapMut.isError,\n error: marketSwapMut.error,\n result: marketSwapMut.data,\n usedPrice,\n freshPrice: marketPrice,\n submittedSwapRequest,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarketSwapStep.js","names":["CancelOrderStepKey","MarketSwapStep","MarketSwapStepKey","NonFlowStep","useMarketFlow","UseMarketFlowInput","UseMarketFlowResult","SubmitSwapResult","constructTxLinkForChain","useLogger","isUserCancelledError","getStandaloneTxHash","useState","ReplaceTxResult","UseMarketSwapStepResult","startMarketSwap","reset","cancelFlow","retryFlow","goToBeforeSwap","isNonFlowStep","isFlowCancellable","isSwapTxCancellable","isSwapTxCancelled","cancelSwapTxResult","cancelSwapTx","step","explorerLink","error","Error","erroredStep","result","usedPrice","submittedSwapRequest","tradeFlowType","swapTxCancellationStep","useMarketSwapStep","options","$","_c","logger","marketFlow","runMarketSwapFlow","permitSigningHappeningOrNeverHappened","signPermit","isPending","isPermitSigned","approvalHappeningOrNeverHappened","approval","isSuccess","willUsePermit","needsApproval","isPermitSupported","isPermitReadyToSign","swapBatch","canBatchTxs","permitOrApprovalHappeningOrNeverHappened","buildTxParams","swap","isConfirmingTX","isConfirmingCalls","permitOrApprovalHappened","txHash","signature","isTxPending","isCallsPending","approvalIsStarted","key","subStep","inSwapTxConfirmation","notYetSwapTxSent","isTxSent","isCallsSent","swapTxHash","transactionHash","isTxCancellable","cancellingState","linkTxHash","replacementTxHash","chainId","undefined","nonFlowStep","setNonFlowStep","t0","Symbol","for","t1","resetStepOverride","once","log","t2","isError","isConfirmingTxError","isConfirmingCallsError","isTxAwaitingError","isCallsAwaitingError","t3","freshPrice","resultProps","t4","options_0","t5","t6","t7","options_1","t8"],"sources":["../../../../src/hooks/swap/tradeFlow/useMarketSwapStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n MarketSwapStep,\n MarketSwapStepKey,\n NonFlowStep,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useMarketFlow,\n type UseMarketFlowInput,\n type UseMarketFlowResult,\n type SubmitSwapResult,\n} from \"./useMarketFlow\";\nimport { constructTxLinkForChain } from \"@/lib/utils/explorer\";\nimport { useLogger } from \"@/core/logger\";\nimport { isUserCancelledError } from \"./common/errors\";\nimport { getStandaloneTxHash } from \"@/transactions/hash\";\nimport { useState } from \"react\";\nimport type { ReplaceTxResult } from \"@/hooks/txs/mutations/useReplaceTx\";\n\ntype UseMarketSwapStepResult = {\n startMarketSwap: UseMarketFlowResult[\"runMarketSwapFlow\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseMarketFlowResult[\"reset\"];\n cancelFlow: UseMarketFlowResult[\"cancelFlow\"];\n retryFlow: UseMarketFlowResult[\"retryFlow\"];\n goToBeforeSwap: () => void;\n isNonFlowStep: boolean;\n isFlowCancellable: boolean;\n isSwapTxCancellable: boolean;\n isSwapTxCancelled: boolean;\n cancelSwapTxResult?: ReplaceTxResult;\n cancelSwapTx: UseMarketFlowResult[\"swap\"][\"cancelSwapTx\"];\n step?: MarketSwapStep;\n explorerLink?: string;\n error: Error | null;\n erroredStep?: MarketSwapStepKey;\n result?: SubmitSwapResult;\n usedPrice: UseMarketFlowResult[\"usedPrice\"];\n submittedSwapRequest?: UseMarketFlowResult[\"submittedSwapRequest\"];\n tradeFlowType: UseMarketFlowResult[\"tradeFlowType\"];\n swapTxCancellationStep?: CancelOrderStepKey;\n};\n\nexport function useMarketSwapStep(\n options: UseMarketFlowInput\n): UseMarketSwapStepResult {\n const logger = useLogger(\"MarketSwapStep\");\n const marketFlow = useMarketFlow(options);\n\n const startMarketSwap = marketFlow.runMarketSwapFlow;\n const reset = marketFlow.reset;\n const cancelFlow = marketFlow.cancelFlow;\n const retryFlow = marketFlow.retryFlow;\n\n let step: MarketSwapStep | undefined;\n\n const permitSigningHappeningOrNeverHappened =\n // isPending starts as false,\n // so we can use !isPermitSigned to detect if Permit signing is happening or never happened\n marketFlow.signPermit.isPending || !marketFlow.signPermit.isPermitSigned;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n marketFlow.approval.isPending || !marketFlow.approval.isSuccess;\n\n const willUsePermit =\n marketFlow.approval.needsApproval &&\n marketFlow.signPermit.isPermitSupported &&\n marketFlow.signPermit.isPermitReadyToSign &&\n !marketFlow.swapBatch.canBatchTxs;\n\n const permitOrApprovalHappeningOrNeverHappened = willUsePermit\n ? permitSigningHappeningOrNeverHappened\n : approvalHappeningOrNeverHappened;\n\n if (\n marketFlow.approval.needsApproval &&\n permitOrApprovalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (\n marketFlow.buildTxParams.isPending ||\n marketFlow.swap.isConfirmingTX ||\n marketFlow.swapBatch.isConfirmingCalls\n ) {\n const permitOrApprovalHappened = !!(\n marketFlow.approval.txHash || marketFlow.signPermit.signature\n );\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (\n marketFlow.swap.isTxPending ||\n marketFlow.swapBatch.isCallsPending\n ) {\n step = { key: \"swap-tx-execution\" };\n } else if (marketFlow.isPending) {\n // if something is between steps but not clear step,\n // then assume we're at the standalone signature sub-step\n step = { key: \"signature\", subStep: \"standalone-order-signature\" };\n }\n\n const approvalIsStarted =\n step?.key === \"signature\" &&\n step.subStep === \"approval-signature\" &&\n marketFlow.approval.isTxPending;\n\n const inSwapTxConfirmation =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const notYetSwapTxSent =\n step?.key === \"swap-tx-execution\" &&\n !marketFlow.swap.isTxSent &&\n !marketFlow.swapBatch.isCallsSent;\n\n // final tx is not yet sent, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n const isFlowCancellable =\n approvalIsStarted || inSwapTxConfirmation || notYetSwapTxSent;\n\n const swapTxHash =\n // either last txHash from batch receipt\n marketFlow.swapBatch.txHash ||\n // or standalone swap txHash\n getStandaloneTxHash({ transactionHash: marketFlow.swap.txHash });\n\n const isSwapTxCancellable = marketFlow.swap.isTxCancellable;\n const isSwapTxCancelled = marketFlow.swap.cancellingState.isSuccess;\n const cancelSwapTxResult = marketFlow.swap.cancellingState.result;\n\n const linkTxHash =\n (isSwapTxCancelled && cancelSwapTxResult?.replacementTxHash) || swapTxHash;\n const explorerLink = linkTxHash\n ? constructTxLinkForChain({\n chainId: marketFlow.chainId,\n txHash: linkTxHash,\n })\n : undefined;\n\n const [nonFlowStep, setNonFlowStep] = useState<NonFlowStep | null>(null);\n const goToBeforeSwap = () => {\n setNonFlowStep({ key: \"prepare-swap\" });\n };\n const resetStepOverride = () => {\n setNonFlowStep(null);\n };\n\n step = nonFlowStep || step;\n const isNonFlowStep = !!nonFlowStep;\n\n logger.once.log(\"step\", step, marketFlow, {\n isFlowCancellable,\n explorerLink,\n txHash: swapTxHash,\n isSwapTxCancellable,\n isSwapTxCancelled,\n cancelSwapTxResult,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(marketFlow.error)\n ? null\n : marketFlow.error;\n\n let erroredStep: MarketSwapStepKey | undefined;\n\n if (marketFlow.isError) {\n if (\n marketFlow.approval.isError ||\n marketFlow.signPermit.isError ||\n marketFlow.buildTxParams.isError ||\n marketFlow.swap.isConfirmingTxError ||\n marketFlow.swapBatch.isConfirmingCallsError\n ) {\n erroredStep = \"signature\";\n } else if (\n marketFlow.swap.isTxAwaitingError ||\n marketFlow.swapBatch.isCallsAwaitingError\n ) {\n erroredStep = \"swap-tx-execution\";\n }\n }\n\n const resultProps: Pick<\n UseMarketSwapStepResult,\n | \"usedPrice\"\n | \"isFlowCancellable\"\n | \"error\"\n | \"erroredStep\"\n | \"result\"\n | \"submittedSwapRequest\"\n | \"explorerLink\"\n | \"swapTxCancellationStep\"\n > = isNonFlowStep\n ? {\n // don't return previous data when in non-flow step\n usedPrice: marketFlow.freshPrice,\n isFlowCancellable: false,\n error: null,\n }\n : {\n isFlowCancellable,\n explorerLink,\n error,\n erroredStep,\n result: marketFlow.result,\n usedPrice: marketFlow.usedPrice,\n submittedSwapRequest: marketFlow.submittedSwapRequest,\n swapTxCancellationStep: marketFlow.swap.cancellingState.step,\n };\n\n return {\n startMarketSwap: (options) => {\n resetStepOverride();\n return startMarketSwap(options);\n },\n reset: () => {\n resetStepOverride();\n return reset();\n },\n cancelFlow: () => {\n resetStepOverride();\n return cancelFlow();\n },\n retryFlow: (options) => {\n resetStepOverride();\n return retryFlow(options);\n },\n goToBeforeSwap,\n step,\n isNonFlowStep,\n ...resultProps,\n tradeFlowType: marketFlow.tradeFlowType,\n isSwapTxCancellable,\n isSwapTxCancelled,\n cancelSwapTxResult,\n cancelSwapTx: marketFlow.swap.cancelSwapTx,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useMarketSwapStep.js","names":["CancelOrderStepKey","MarketSwapStep","MarketSwapStepKey","NonFlowStep","useMarketFlow","UseMarketFlowInput","UseMarketFlowResult","SubmitSwapResult","constructTxLinkForChain","useLogger","isUserCancelledError","getStandaloneTxHash","useState","ReplaceTxResult","UseMarketSwapStepResult","startMarketSwap","reset","cancelFlow","retryFlow","goToBeforeSwap","isNonFlowStep","isFlowCancellable","isSwapTxCancellable","isSwapTxCancelled","cancelSwapTxResult","cancelSwapTx","step","explorerLink","error","Error","erroredStep","result","usedPrice","submittedSwapRequest","tradeFlowType","swapTxCancellationStep","useMarketSwapStep","options","$","_c","logger","marketFlow","runMarketSwapFlow","permitSigningHappeningOrNeverHappened","signPermit","isPending","isPermitSigned","approvalHappeningOrNeverHappened","approval","isSuccess","willUsePermit","needsApproval","isPermitSupported","isPermitReadyToSign","swapBatch","canBatchTxs","permitOrApprovalHappeningOrNeverHappened","buildTxParams","swap","isConfirmingTX","isConfirmingCalls","permitOrApprovalHappened","txHash","signature","isTxPending","isCallsPending","approvalIsStarted","key","subStep","inSwapTxConfirmation","notYetSwapTxSent","isTxSent","isCallsSent","swapTxHash","transactionHash","isTxCancellable","cancellingState","linkTxHash","replacementTxHash","chainId","undefined","nonFlowStep","setNonFlowStep","t0","Symbol","for","t1","resetStepOverride","once","log","t2","isError","isConfirmingTxError","isConfirmingCallsError","isTxAwaitingError","isCallsAwaitingError","t3","freshPrice","resultProps","t4","options_0","t5","t6","t7","options_1","t8"],"sources":["../../../../src/hooks/swap/tradeFlow/useMarketSwapStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n MarketSwapStep,\n MarketSwapStepKey,\n NonFlowStep,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useMarketFlow,\n type UseMarketFlowInput,\n type UseMarketFlowResult,\n type SubmitSwapResult,\n} from \"./useMarketFlow\";\nimport { constructTxLinkForChain } from \"@/lib/utils/explorer\";\nimport { useLogger } from \"@/core/logger\";\nimport { isUserCancelledError } from \"./common/errors\";\nimport { getStandaloneTxHash } from \"@/transactions/hash\";\nimport { useState } from \"react\";\nimport type { ReplaceTxResult } from \"@/hooks/txs/mutations/useReplaceTx\";\n\ntype UseMarketSwapStepResult = {\n startMarketSwap: UseMarketFlowResult[\"runMarketSwapFlow\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseMarketFlowResult[\"reset\"];\n cancelFlow: UseMarketFlowResult[\"cancelFlow\"];\n retryFlow: UseMarketFlowResult[\"retryFlow\"];\n goToBeforeSwap: () => void;\n isNonFlowStep: boolean;\n isFlowCancellable: boolean;\n isSwapTxCancellable: boolean;\n isSwapTxCancelled: boolean;\n cancelSwapTxResult?: ReplaceTxResult;\n cancelSwapTx: UseMarketFlowResult[\"swap\"][\"cancelSwapTx\"];\n step?: MarketSwapStep;\n explorerLink?: string;\n error: Error | null;\n erroredStep?: MarketSwapStepKey;\n result?: SubmitSwapResult;\n usedPrice: UseMarketFlowResult[\"usedPrice\"];\n submittedSwapRequest?: UseMarketFlowResult[\"submittedSwapRequest\"];\n tradeFlowType: UseMarketFlowResult[\"tradeFlowType\"];\n swapTxCancellationStep?: CancelOrderStepKey;\n};\n\nexport function useMarketSwapStep(\n options: UseMarketFlowInput\n): UseMarketSwapStepResult {\n const logger = useLogger(\"MarketSwapStep\");\n const marketFlow = useMarketFlow(options);\n\n const startMarketSwap = marketFlow.runMarketSwapFlow;\n const reset = marketFlow.reset;\n const cancelFlow = marketFlow.cancelFlow;\n const retryFlow = marketFlow.retryFlow;\n\n let step: MarketSwapStep | undefined;\n\n const permitSigningHappeningOrNeverHappened =\n // isPending starts as false,\n // so we can use !isPermitSigned to detect if Permit signing is happening or never happened\n marketFlow.signPermit.isPending || !marketFlow.signPermit.isPermitSigned;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n marketFlow.approval.isPending || !marketFlow.approval.isSuccess;\n\n const willUsePermit =\n marketFlow.approval.needsApproval &&\n marketFlow.signPermit.isPermitSupported &&\n marketFlow.signPermit.isPermitReadyToSign &&\n !marketFlow.swapBatch.canBatchTxs;\n\n const permitOrApprovalHappeningOrNeverHappened = willUsePermit\n ? permitSigningHappeningOrNeverHappened\n : approvalHappeningOrNeverHappened;\n\n if (\n marketFlow.approval.needsApproval &&\n permitOrApprovalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (\n marketFlow.buildTxParams.isPending ||\n marketFlow.swap.isConfirmingTX ||\n marketFlow.swapBatch.isConfirmingCalls\n ) {\n const permitOrApprovalHappened = !!(\n marketFlow.approval.txHash || marketFlow.signPermit.signature\n );\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (\n marketFlow.swap.isTxPending ||\n marketFlow.swapBatch.isCallsPending\n ) {\n step = { key: \"swap-tx-execution\" };\n } else if (marketFlow.isPending) {\n // if something is between steps but not clear step,\n // then assume we're at the standalone signature sub-step\n step = { key: \"signature\", subStep: \"standalone-order-signature\" };\n }\n\n const approvalIsStarted =\n step?.key === \"signature\" &&\n step.subStep === \"approval-signature\" &&\n marketFlow.approval.isTxPending;\n\n const inSwapTxConfirmation =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const notYetSwapTxSent =\n step?.key === \"swap-tx-execution\" &&\n !marketFlow.swap.isTxSent &&\n !marketFlow.swapBatch.isCallsSent;\n\n // final tx is not yet sent, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n const isFlowCancellable =\n approvalIsStarted || inSwapTxConfirmation || notYetSwapTxSent;\n\n const swapTxHash =\n // either last txHash from batch receipt\n marketFlow.swapBatch.txHash ||\n // or standalone swap txHash\n getStandaloneTxHash({ transactionHash: marketFlow.swap.txHash });\n\n const isSwapTxCancellable = marketFlow.swap.isTxCancellable;\n const isSwapTxCancelled = marketFlow.swap.cancellingState.isSuccess;\n const cancelSwapTxResult = marketFlow.swap.cancellingState.result;\n\n const linkTxHash =\n (isSwapTxCancelled && cancelSwapTxResult?.replacementTxHash) || swapTxHash;\n const explorerLink = linkTxHash\n ? constructTxLinkForChain({\n chainId: marketFlow.chainId,\n txHash: linkTxHash,\n })\n : undefined;\n\n const [nonFlowStep, setNonFlowStep] = useState<NonFlowStep | null>(null);\n const goToBeforeSwap = () => {\n setNonFlowStep({ key: \"prepare-swap\" });\n };\n const resetStepOverride = () => {\n setNonFlowStep(null);\n };\n\n step = nonFlowStep || step;\n const isNonFlowStep = !!nonFlowStep;\n\n logger.once.log(\"step\", step, marketFlow, {\n isFlowCancellable,\n explorerLink,\n txHash: swapTxHash,\n isSwapTxCancellable,\n isSwapTxCancelled,\n cancelSwapTxResult,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(marketFlow.error)\n ? null\n : marketFlow.error;\n\n let erroredStep: MarketSwapStepKey | undefined;\n\n if (marketFlow.isError) {\n if (\n marketFlow.approval.isError ||\n marketFlow.signPermit.isError ||\n marketFlow.buildTxParams.isError ||\n marketFlow.swap.isConfirmingTxError ||\n marketFlow.swapBatch.isConfirmingCallsError\n ) {\n erroredStep = \"signature\";\n } else if (\n marketFlow.swap.isTxAwaitingError ||\n marketFlow.swapBatch.isCallsAwaitingError\n ) {\n erroredStep = \"swap-tx-execution\";\n }\n }\n\n const resultProps: Pick<\n UseMarketSwapStepResult,\n | \"usedPrice\"\n | \"isFlowCancellable\"\n | \"error\"\n | \"erroredStep\"\n | \"result\"\n | \"submittedSwapRequest\"\n | \"explorerLink\"\n | \"swapTxCancellationStep\"\n > = isNonFlowStep\n ? {\n // don't return previous data when in non-flow step\n usedPrice: marketFlow.freshPrice,\n isFlowCancellable: false,\n error: null,\n }\n : {\n isFlowCancellable,\n explorerLink,\n error,\n erroredStep,\n result: marketFlow.result,\n usedPrice: marketFlow.usedPrice,\n submittedSwapRequest: marketFlow.submittedSwapRequest,\n swapTxCancellationStep: marketFlow.swap.cancellingState.step,\n };\n\n return {\n startMarketSwap: (options) => {\n resetStepOverride();\n return startMarketSwap(options);\n },\n reset: () => {\n resetStepOverride();\n return reset();\n },\n cancelFlow: () => {\n resetStepOverride();\n return cancelFlow();\n },\n retryFlow: (options) => {\n resetStepOverride();\n return retryFlow(options);\n },\n goToBeforeSwap,\n step,\n isNonFlowStep,\n ...resultProps,\n tradeFlowType: marketFlow.tradeFlowType,\n isSwapTxCancellable,\n isSwapTxCancelled,\n cancelSwapTxResult,\n cancelSwapTx: marketFlow.swap.cancelSwapTx,\n };\n}\n"],"mappings":"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"}
|