@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":"useFillOtcOrderFlow.js","names":["useAccount","useChainId","assert","useAwaitTx","useEnsureTxReceipt","zeroAddress","Address","Hash","TransactionReceipt","ApprovalFlowResult","SignPermitFlowResult","SubmitTxResult","useMinViemClient","useMutation","useRef","SupportedChainId","UserCancelledError","CallsSentObject","TxSentObject","useApproveOrPermit","useLogger","LimitOrderFromApi","useFillOrder","OrderFillData","useMarkPermit1Or2NonceAsUsed","SignedPermitResult","FillableOtcOrderItem","useWidgetEvents","useCanBatchTxs","useBatchWithApproveTxs","useSendBatchTx","useAwaitCalls","useEnsureCallsStatus","CallsReceipt","useCalldataSDK","fillOtcOrderFlowType","UseFillOtcOrderFlowInput","order","SubmitFillOtcOrderResult","tradeFlowType","approve","fill","txHash","txReceipt","account","receiverAddress","OnTxSent","txSent","RunFillOtcOrderOptions","onTxSent","UseFillOtcOrderFlowResult","chainId","runFillOtcOrderFlow","options","Promise","reset","cancelFlow","retryFlow","approval","signPermit","fillOrder","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isTxMined","isTxAwaitingError","isPending","isError","isSuccess","error","Error","fillOrderBatch","canBatchTxs","callsId","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","result","OTC_ORDER_MUTATION_KEY","useFillOtcOrderFlow","logger","approveTxMut","signPermitMut","events","approveOrPermitEvents","srcToken","takerAsset","srcAmount","takerAmount","spenderContractType","swapSide","tradeMode","address","minClient","sdk","callDataSDK","client","fillOrderMut","mutationOptions","onSuccess","log","onError","forCurrentChain","addTxWithApprovals","batchTxMut","fillTxMined","hash","data","batchTxMined","id","isLoading","lastCallsReceipt","receipts","length","transactionHash","ensureTxReceipt","ensureCallsStatus","currentAbortControllerRef","AbortController","current","abort","markNonceAsUsed","clearNonce","submitFillTx","taker","abortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","baseEventParams","orderHash","orderType","const","orderSubType","type","onFillOTCOrder","event","name","params","shouldBatchTxs","needsApproval","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","throwIfAborted","approveTxReceiptPromise","onReplaced","action","receiptPromise","transactionSpecificData","approvedAmount","tokenAddress","token","spenderAddress","spender","confirmed","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","orderFillData","signature","takerPermit","encodedPermitParams","fillTxHash","fillCallsId","calldata","fillOrderDirectly","calls","txsParams","to","approveProps","sendCallsResult","sendCalls","mutateAsync","signedPermitData","fillCallsReceipt","fillTxReceipt","sendCallsReceiptPromise","then","status","filledOrder","callsReceipt","fillTxReceiptPromise","runFillOrderMut","mutationFn","mutationKey","onSettled"],"sources":["../../../../src/hooks/otc/tradeFlow/useFillOtcOrderFlow.ts"],"sourcesContent":["import { useAccount, useChainId } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useAwaitTx, useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport {\n zeroAddress,\n type Address,\n type Hash,\n type TransactionReceipt,\n} from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"../../swap/tradeFlow/common/types\";\n\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 \"../../swap/tradeFlow/common/errors\";\nimport {\n type CallsSentObject,\n type TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"../../swap/tradeFlow/common/useApproveOrPermit\";\nimport { useLogger } from \"@/core/logger\";\n\nimport type { LimitOrderFromApi } from \"@velora-dex/sdk\";\nimport { useFillOrder, type OrderFillData } from \"../mutations/useFillOrder\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"@/hooks/swap/tradeFlow/common/useSignPermit1Or2\";\nimport type { FillableOtcOrderItem } from \"@/components/widget/OtcOrderItem/types\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n type CallsReceipt,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { useCalldataSDK } from \"@/hooks/useSDK\";\n\nconst fillOtcOrderFlowType = \"fillOtcOrder\";\n\nexport type UseFillOtcOrderFlowInput = {\n order?: FillableOtcOrderItem;\n};\n\nexport type SubmitFillOtcOrderResult = {\n tradeFlowType: typeof fillOtcOrderFlowType;\n approve: SubmitTxResult;\n fill: {\n order: LimitOrderFromApi;\n txHash?: Hash;\n txReceipt?: TransactionReceipt;\n };\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunFillOtcOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseFillOtcOrderFlowResult = {\n tradeFlowType: typeof fillOtcOrderFlowType;\n chainId: SupportedChainId;\n runFillOtcOrderFlow: (\n options?: RunFillOtcOrderOptions\n ) => Promise<SubmitFillOtcOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (\n options?: RunFillOtcOrderOptions\n ) => Promise<SubmitFillOtcOrderResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n fillOrder: {\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 error: Error | null;\n };\n fillOrderBatch: {\n canBatchTxs?: boolean;\n callsId?: string;\n txHash?: Hash;\n receipt?: CallsReceipt;\n isConfirmingCalls: boolean;\n isConfirmingCallsError: boolean;\n isCallsSent: boolean;\n isCallsPending: boolean;\n isCallsMined: boolean;\n isCallsAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitFillOtcOrderResult;\n};\n\nconst OTC_ORDER_MUTATION_KEY = \"runFillOtcOrderFlow\";\n\nexport function useFillOtcOrderFlow({\n order,\n}: UseFillOtcOrderFlowInput): UseFillOtcOrderFlowResult {\n const logger = useLogger(\"FillOtcOrderFlow\");\n const chainId = useChainId();\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: order?.takerAsset,\n srcAmount: order?.takerAmount,\n spenderContractType: \"AugustusRFQ\",\n swapSide: \"SELL\",\n tradeMode: \"otc\",\n chainId,\n });\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n const { sdk: callDataSDK } = useCalldataSDK({\n chainId,\n client: minClient,\n });\n\n /* 4. Submit fill OTC Order tx */\n\n // 4.1. submit standalone tx\n const fillOrderMut = useFillOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Fill OTC Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Fill OTC Order error\", error);\n },\n },\n });\n\n /* 4.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 /* Await tx */\n\n /* 5.1. await standalone Fill tx */\n const fillTxMined = useAwaitTx({\n chainId,\n hash: fillOrderMut.data,\n });\n\n /* 5.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const fillOrder: UseFillOtcOrderFlowResult[\"fillOrder\"] = {\n txHash: fillOrderMut.data,\n receipt: fillTxMined.data,\n /* tx sending */\n isConfirmingTX: fillOrderMut.isPending,\n isConfirmingTxError: fillOrderMut.isError,\n isTxSent: fillOrderMut.isSuccess,\n /* tx awaiting */\n isTxPending: fillTxMined.isPending,\n isTxMined: fillTxMined.isSuccess,\n isTxAwaitingError: fillTxMined.isError,\n /* combined */\n isPending: fillOrderMut.isPending || fillTxMined.isLoading,\n isSuccess: fillTxMined.isSuccess, // success only when tx is mined\n isError: fillOrderMut.isError || fillTxMined.isError,\n error: fillOrderMut.error || fillTxMined.error,\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 fillOrderBatch: UseFillOtcOrderFlowResult[\"fillOrderBatch\"] = {\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 ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\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 { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const events = useWidgetEvents();\n\n const submitFillTx = async ({\n onTxSent,\n }: RunFillOtcOrderOptions = {}): Promise<SubmitFillOtcOrderResult> => {\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 fillOrderMut.reset();\n batchTxMut.reset();\n\n // no sense in starting flow without an order\n assert(order, \"no order to fill\");\n assert(order.taker !== zeroAddress, \"taker must not be zero address\");\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 const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n\n const baseEventParams = {\n orderHash: order.orderHash,\n orderType: \"OTC\" as const,\n orderSubType: order.type,\n };\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:request\",\n params: baseEventParams,\n },\n });\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n // Token doesn't support Permit\n // make an Approval tx\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 } 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\n const orderFillData: OrderFillData = {\n order,\n signature: order.signature,\n };\n\n if (signedPermitResult) {\n orderFillData.takerPermit = {\n encodedPermitParams: signedPermitResult.permitEncodedArgs,\n };\n }\n\n let fillTxHash: Hash | undefined;\n let fillCallsId: string | undefined;\n\n if (shouldBatchTxs) {\n assert(callDataSDK, \"callDataSDK is not initialized\");\n\n const calldata = await callDataSDK.fillOrderDirectly({\n order,\n signature: order.signature,\n });\n\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: approval.spender,\n account,\n data: calldata,\n value: 0n,\n 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 const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n fillCallsId = sendCallsResult.id;\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:sent\",\n params: {\n callsId: fillCallsId,\n ...baseEventParams,\n },\n },\n });\n } else {\n fillTxHash = await fillOrderMut.mutateAsync({\n orderFillData,\n signal,\n });\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:sent\",\n params: {\n txHash: fillTxHash,\n ...baseEventParams,\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 fillCallsReceipt: CallsReceipt | undefined;\n let fillTxReceipt: TransactionReceipt | undefined;\n\n if (fillCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: fillCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ fillTx ~ awaiting calls id :\", fillCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n callsId: fillCallsId,\n action: \"fillOtcOrder\",\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"fillOtcOrder\",\n filledOrder: order,\n },\n });\n }\n\n fillCallsReceipt = await sendCallsReceiptPromise;\n\n if (fillCallsReceipt) {\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:confirmed\",\n params: {\n callsId: fillCallsId,\n callsReceipt: fillCallsReceipt,\n ...baseEventParams,\n },\n },\n });\n }\n } else if (fillTxHash) {\n const fillTxReceiptPromise = ensureTxReceipt({\n hash: fillTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:fillTx\", fillTxHash, data);\n },\n });\n\n logger.log(\"~ fillTx ~ awaiting tx hash :\", fillTxHash);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n transactionHash: fillTxHash,\n action: \"fillOtcOrder\",\n receiptPromise: fillTxReceiptPromise,\n transactionSpecificData: {\n action: \"fillOtcOrder\",\n filledOrder: order,\n },\n });\n }\n\n fillTxReceipt = await fillTxReceiptPromise;\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:confirmed\",\n params: {\n txHash: fillTxHash,\n txReceipt: fillTxReceipt,\n ...baseEventParams,\n },\n },\n });\n }\n\n logger.log(\"~ fillTx ~ receipt:\", fillCallsReceipt || fillTxReceipt);\n\n return {\n tradeFlowType: fillOtcOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n fill: {\n txHash: fillTxHash,\n txReceipt: fillTxReceipt,\n order,\n },\n account,\n receiverAddress: order.taker as Address,\n };\n } catch (error) {\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:failed\",\n params: {\n ...baseEventParams,\n error: error as Error,\n },\n },\n });\n // Fill order failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n throw error;\n }\n };\n\n const runFillOrderMut = useMutation({\n mutationFn: submitFillTx,\n mutationKey: [OTC_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Fill order flow success\", data);\n },\n onError: (error) => {\n logger.error(\"Fill order flow error\", error);\n },\n onSettled: () => {\n logger.log(\"Fill order flow settled\");\n },\n });\n\n const runFillOtcOrderFlow = runFillOrderMut.mutateAsync;\n\n const reset = () => {\n approveTxMut.reset();\n signPermitMut.reset();\n fillOrderMut.reset();\n batchTxMut.reset();\n runFillOrderMut.reset();\n };\n\n const retryFlow = (\n options?: RunFillOtcOrderOptions\n ): Promise<SubmitFillOtcOrderResult> => {\n reset();\n return runFillOtcOrderFlow(options);\n };\n\n /* 5. return result */\n return {\n tradeFlowType: fillOtcOrderFlowType,\n chainId,\n runFillOtcOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n fillOrder,\n fillOrderBatch,\n isPending: runFillOrderMut.isPending,\n isSuccess: runFillOrderMut.isSuccess,\n isError: runFillOrderMut.isError,\n error: runFillOrderMut.error,\n result: runFillOrderMut.data,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useFillOtcOrderFlow.js","names":["useAccount","useChainId","assert","useAwaitTx","useEnsureTxReceipt","zeroAddress","Address","Hash","TransactionReceipt","ApprovalFlowResult","SignPermitFlowResult","SubmitTxResult","useMinViemClient","useMutation","useRef","SupportedChainId","UserCancelledError","CallsSentObject","TxSentObject","useApproveOrPermit","useLogger","LimitOrderFromApi","useFillOrder","OrderFillData","useMarkPermit1Or2NonceAsUsed","SignedPermitResult","FillableOtcOrderItem","useWidgetEvents","useCanBatchTxs","useBatchWithApproveTxs","useSendBatchTx","useAwaitCalls","useEnsureCallsStatus","CallsReceipt","useCalldataSDK","fillOtcOrderFlowType","UseFillOtcOrderFlowInput","order","SubmitFillOtcOrderResult","tradeFlowType","approve","fill","txHash","txReceipt","account","receiverAddress","OnTxSent","txSent","RunFillOtcOrderOptions","onTxSent","UseFillOtcOrderFlowResult","chainId","runFillOtcOrderFlow","options","Promise","reset","cancelFlow","retryFlow","approval","signPermit","fillOrder","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isTxMined","isTxAwaitingError","isPending","isError","isSuccess","error","Error","fillOrderBatch","canBatchTxs","callsId","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","result","OTC_ORDER_MUTATION_KEY","useFillOtcOrderFlow","logger","approveTxMut","signPermitMut","events","approveOrPermitEvents","srcToken","takerAsset","srcAmount","takerAmount","spenderContractType","swapSide","tradeMode","address","minClient","sdk","callDataSDK","client","fillOrderMut","mutationOptions","onSuccess","log","onError","forCurrentChain","addTxWithApprovals","batchTxMut","fillTxMined","hash","data","batchTxMined","id","isLoading","lastCallsReceipt","receipts","length","transactionHash","ensureTxReceipt","ensureCallsStatus","currentAbortControllerRef","AbortController","current","abort","markNonceAsUsed","clearNonce","submitFillTx","taker","abortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","baseEventParams","orderHash","orderType","const","orderSubType","type","onFillOTCOrder","event","name","params","shouldBatchTxs","needsApproval","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","throwIfAborted","approveTxReceiptPromise","onReplaced","action","receiptPromise","transactionSpecificData","approvedAmount","tokenAddress","token","spenderAddress","spender","confirmed","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","orderFillData","signature","takerPermit","encodedPermitParams","fillTxHash","fillCallsId","calldata","fillOrderDirectly","calls","txsParams","to","approveProps","sendCallsResult","sendCalls","mutateAsync","signedPermitData","fillCallsReceipt","fillTxReceipt","sendCallsReceiptPromise","then","status","filledOrder","callsReceipt","fillTxReceiptPromise","runFillOrderMut","mutationFn","mutationKey","onSettled"],"sources":["../../../../src/hooks/otc/tradeFlow/useFillOtcOrderFlow.ts"],"sourcesContent":["import { useAccount, useChainId } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useAwaitTx, useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport {\n zeroAddress,\n type Address,\n type Hash,\n type TransactionReceipt,\n} from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"../../swap/tradeFlow/common/types\";\n\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 \"../../swap/tradeFlow/common/errors\";\nimport {\n type CallsSentObject,\n type TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"../../swap/tradeFlow/common/useApproveOrPermit\";\nimport { useLogger } from \"@/core/logger\";\n\nimport type { LimitOrderFromApi } from \"@velora-dex/sdk\";\nimport { useFillOrder, type OrderFillData } from \"../mutations/useFillOrder\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"@/hooks/swap/tradeFlow/common/useSignPermit1Or2\";\nimport type { FillableOtcOrderItem } from \"@/components/widget/OtcOrderItem/types\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n type CallsReceipt,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { useCalldataSDK } from \"@/hooks/useSDK\";\n\nconst fillOtcOrderFlowType = \"fillOtcOrder\";\n\nexport type UseFillOtcOrderFlowInput = {\n order?: FillableOtcOrderItem;\n};\n\nexport type SubmitFillOtcOrderResult = {\n tradeFlowType: typeof fillOtcOrderFlowType;\n approve: SubmitTxResult;\n fill: {\n order: LimitOrderFromApi;\n txHash?: Hash;\n txReceipt?: TransactionReceipt;\n };\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunFillOtcOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseFillOtcOrderFlowResult = {\n tradeFlowType: typeof fillOtcOrderFlowType;\n chainId: SupportedChainId;\n runFillOtcOrderFlow: (\n options?: RunFillOtcOrderOptions\n ) => Promise<SubmitFillOtcOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (\n options?: RunFillOtcOrderOptions\n ) => Promise<SubmitFillOtcOrderResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n fillOrder: {\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 error: Error | null;\n };\n fillOrderBatch: {\n canBatchTxs?: boolean;\n callsId?: string;\n txHash?: Hash;\n receipt?: CallsReceipt;\n isConfirmingCalls: boolean;\n isConfirmingCallsError: boolean;\n isCallsSent: boolean;\n isCallsPending: boolean;\n isCallsMined: boolean;\n isCallsAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitFillOtcOrderResult;\n};\n\nconst OTC_ORDER_MUTATION_KEY = \"runFillOtcOrderFlow\";\n\nexport function useFillOtcOrderFlow({\n order,\n}: UseFillOtcOrderFlowInput): UseFillOtcOrderFlowResult {\n const logger = useLogger(\"FillOtcOrderFlow\");\n const chainId = useChainId();\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: order?.takerAsset,\n srcAmount: order?.takerAmount,\n spenderContractType: \"AugustusRFQ\",\n swapSide: \"SELL\",\n tradeMode: \"otc\",\n chainId,\n });\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n const { sdk: callDataSDK } = useCalldataSDK({\n chainId,\n client: minClient,\n });\n\n /* 4. Submit fill OTC Order tx */\n\n // 4.1. submit standalone tx\n const fillOrderMut = useFillOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Fill OTC Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Fill OTC Order error\", error);\n },\n },\n });\n\n /* 4.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 /* Await tx */\n\n /* 5.1. await standalone Fill tx */\n const fillTxMined = useAwaitTx({\n chainId,\n hash: fillOrderMut.data,\n });\n\n /* 5.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const fillOrder: UseFillOtcOrderFlowResult[\"fillOrder\"] = {\n txHash: fillOrderMut.data,\n receipt: fillTxMined.data,\n /* tx sending */\n isConfirmingTX: fillOrderMut.isPending,\n isConfirmingTxError: fillOrderMut.isError,\n isTxSent: fillOrderMut.isSuccess,\n /* tx awaiting */\n isTxPending: fillTxMined.isPending,\n isTxMined: fillTxMined.isSuccess,\n isTxAwaitingError: fillTxMined.isError,\n /* combined */\n isPending: fillOrderMut.isPending || fillTxMined.isLoading,\n isSuccess: fillTxMined.isSuccess, // success only when tx is mined\n isError: fillOrderMut.isError || fillTxMined.isError,\n error: fillOrderMut.error || fillTxMined.error,\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 fillOrderBatch: UseFillOtcOrderFlowResult[\"fillOrderBatch\"] = {\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 ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\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 { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const events = useWidgetEvents();\n\n const submitFillTx = async ({\n onTxSent,\n }: RunFillOtcOrderOptions = {}): Promise<SubmitFillOtcOrderResult> => {\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 fillOrderMut.reset();\n batchTxMut.reset();\n\n // no sense in starting flow without an order\n assert(order, \"no order to fill\");\n assert(order.taker !== zeroAddress, \"taker must not be zero address\");\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 const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n\n const baseEventParams = {\n orderHash: order.orderHash,\n orderType: \"OTC\" as const,\n orderSubType: order.type,\n };\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:request\",\n params: baseEventParams,\n },\n });\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n // Token doesn't support Permit\n // make an Approval tx\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 } 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\n const orderFillData: OrderFillData = {\n order,\n signature: order.signature,\n };\n\n if (signedPermitResult) {\n orderFillData.takerPermit = {\n encodedPermitParams: signedPermitResult.permitEncodedArgs,\n };\n }\n\n let fillTxHash: Hash | undefined;\n let fillCallsId: string | undefined;\n\n if (shouldBatchTxs) {\n assert(callDataSDK, \"callDataSDK is not initialized\");\n\n const calldata = await callDataSDK.fillOrderDirectly({\n order,\n signature: order.signature,\n });\n\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: approval.spender,\n account,\n data: calldata,\n value: 0n,\n 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 const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n fillCallsId = sendCallsResult.id;\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:sent\",\n params: {\n callsId: fillCallsId,\n ...baseEventParams,\n },\n },\n });\n } else {\n fillTxHash = await fillOrderMut.mutateAsync({\n orderFillData,\n signal,\n });\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:sent\",\n params: {\n txHash: fillTxHash,\n ...baseEventParams,\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 fillCallsReceipt: CallsReceipt | undefined;\n let fillTxReceipt: TransactionReceipt | undefined;\n\n if (fillCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: fillCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ fillTx ~ awaiting calls id :\", fillCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n callsId: fillCallsId,\n action: \"fillOtcOrder\",\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"fillOtcOrder\",\n filledOrder: order,\n },\n });\n }\n\n fillCallsReceipt = await sendCallsReceiptPromise;\n\n if (fillCallsReceipt) {\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:confirmed\",\n params: {\n callsId: fillCallsId,\n callsReceipt: fillCallsReceipt,\n ...baseEventParams,\n },\n },\n });\n }\n } else if (fillTxHash) {\n const fillTxReceiptPromise = ensureTxReceipt({\n hash: fillTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:fillTx\", fillTxHash, data);\n },\n });\n\n logger.log(\"~ fillTx ~ awaiting tx hash :\", fillTxHash);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n transactionHash: fillTxHash,\n action: \"fillOtcOrder\",\n receiptPromise: fillTxReceiptPromise,\n transactionSpecificData: {\n action: \"fillOtcOrder\",\n filledOrder: order,\n },\n });\n }\n\n fillTxReceipt = await fillTxReceiptPromise;\n\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:confirmed\",\n params: {\n txHash: fillTxHash,\n txReceipt: fillTxReceipt,\n ...baseEventParams,\n },\n },\n });\n }\n\n logger.log(\"~ fillTx ~ receipt:\", fillCallsReceipt || fillTxReceipt);\n\n return {\n tradeFlowType: fillOtcOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n fill: {\n txHash: fillTxHash,\n txReceipt: fillTxReceipt,\n order,\n },\n account,\n receiverAddress: order.taker as Address,\n };\n } catch (error) {\n events.onFillOTCOrder?.({\n event: {\n name: \"FillOTCOrder:failed\",\n params: {\n ...baseEventParams,\n error: error as Error,\n },\n },\n });\n // Fill order failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n throw error;\n }\n };\n\n const runFillOrderMut = useMutation({\n mutationFn: submitFillTx,\n mutationKey: [OTC_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Fill order flow success\", data);\n },\n onError: (error) => {\n logger.error(\"Fill order flow error\", error);\n },\n onSettled: () => {\n logger.log(\"Fill order flow settled\");\n },\n });\n\n const runFillOtcOrderFlow = runFillOrderMut.mutateAsync;\n\n const reset = () => {\n approveTxMut.reset();\n signPermitMut.reset();\n fillOrderMut.reset();\n batchTxMut.reset();\n runFillOrderMut.reset();\n };\n\n const retryFlow = (\n options?: RunFillOtcOrderOptions\n ): Promise<SubmitFillOtcOrderResult> => {\n reset();\n return runFillOtcOrderFlow(options);\n };\n\n /* 5. return result */\n return {\n tradeFlowType: fillOtcOrderFlowType,\n chainId,\n runFillOtcOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n fillOrder,\n fillOrderBatch,\n isPending: runFillOrderMut.isPending,\n isSuccess: runFillOrderMut.isSuccess,\n isError: runFillOrderMut.isError,\n error: runFillOrderMut.error,\n result: runFillOrderMut.data,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AA6CA,IAAMmC,IAAuB,gBA0EvBgD,IAAyB;AAE/B,SAAgBC,EAAoB,EAClC/C,YACsD;CACtD,IAAMgD,IAASjE,EAAU,mBAAmB,EACtC+B,IAAUlD,GAAY,EAUtB,EACJyD,aACAC,eACA2B,iBACAC,kBACAC,QAAQC,MACNtE,EAAmB;EACrBuE,UAAUrD,GAAOsD;EACjBC,WAAWvD,GAAOwD;EAClBC,qBAAqB;EACrBC,UAAU;EACVC,WAAW;EACX7C;EACD,CAAC,EAEI,EAAE8C,SAASrD,MAAY5C,GAAY,EAEnC,EAAEkG,iBAActF,EAAiB;EACrCuC;EACAP;EACD,CAAC,EAEI,EAAEuD,KAAKC,MAAgBlE,EAAe;EAC1CiB;EACAkD,QAAQH;EACT,CAAC,EAKII,IAAehF,EAAa;EAChC6B;EACAP;EACAyD,QAAQH;EACRK,iBAAiB;GACfC,YAAYnE,MAAU;IACpBgD,EAAOoB,IAAI,0BAA0BpE,EAAM;;GAE7CqE,UAAUnC,MAAU;IAClBc,EAAOd,MAAM,wBAAwBA,EAAM;;GAE/C;EACD,CAAC,EAGI,EAAEoC,iBAAiBjC,MAAgB9C,GAAgB,EACnD,EAAEgF,0BAAuB/E,GAAwB,EAEjDgF,IAAa/E,EAAe;EAChC0E,iBAAiB;GACfnB,EAAOoB,IAAI,mBAAmB;;EAEhCC,UAAUnC,MAAU;GAClBc,EAAOd,MAAM,kBAAkBA,EAAM;;EAExC,CAAC,EAKIuC,IAAc3G,EAAW;EAC7BgD;EACA4D,MAAMT,EAAaU;EACpB,CAAC,EAGIC,IAAelF,EAAc,EACjCmF,IAAIL,EAAWG,MAAME,IACtB,CAAC,EAEItD,IAAoD;EACxDlB,QAAQ4D,EAAaU;EACrBnD,SAASiD,EAAYE;EAErBlD,gBAAgBwC,EAAalC;EAC7BL,qBAAqBuC,EAAajC;EAClCL,UAAUsC,EAAahC;EAEvBL,aAAa6C,EAAY1C;EACzBF,WAAW4C,EAAYxC;EACvBH,mBAAmB2C,EAAYzC;EAE/BD,WAAWkC,EAAalC,aAAa0C,EAAYK;EACjD7C,WAAWwC,EAAYxC;EACvBD,SAASiC,EAAajC,WAAWyC,EAAYzC;EAC7CE,OAAO+B,EAAa/B,SAASuC,EAAYvC;EAC1C,EAIK6C,IACJH,EAAaD,MAAMK,WAAWJ,EAAaD,KAAKK,SAASC,SAAS,IAE9D7C,IAA8D;EAClEC;EACAC,SAASkC,EAAWG,MAAME;EAC1BxE,QAAQ0E,GAAkBG;EAC1B1D,SAASuD;EAETxC,mBAAmBiC,EAAWzC;EAC9BS,wBAAwBgC,EAAWxC;EACnCS,aAAa+B,EAAWvC;EAExBS,gBAAgBkC,EAAaE;EAC7BnC,cAAciC,EAAa3C;EAC3BW,sBAAsBgC,EAAa5C;EAEnCD,WAAWyC,EAAWzC,aAAa6C,EAAaE;EAChD7C,WAAW2C,EAAa3C;EACxBD,SAASwC,EAAWxC,WAAW4C,EAAa5C;EAC5CE,OAAOsC,EAAWtC,SAAS0C,EAAa1C;EACzC,EAEKiD,IAAkBpH,GAAoB,EACtCqH,IAAoBzF,GAAsB,EAE1C0F,IAA4B5G,EAA+B,KAAK,EAEhE0C,UAAmB;EAEvBkE,AADAA,EAA0BE,SAASC,MAAM,IAAI7G,GAAoB,CAAC,EAClE0G,EAA0BE,UAAU;IAGhC,EAAEE,oBAAiBC,kBAAevG,EAA6B,EACnE2B,YACD,CAAC,EAEIqC,IAAS7D,GAAiB,EAwU1B6K,IAAkB3L,EAAY;EAClC4L,YAAYzE,OAvUc,EAC1B/E,gBAC0B,EAAE,KAAwC;GAUpE/C,AAPAoF,EAAa/B,OAAO,EACpBgC,EAAchC,OAAO,EACrB+C,EAAa/C,OAAO,EACpBsD,EAAWtD,OAAO,EAGlBrD,EAAOmC,GAAO,mBAAmB,EACjCnC,EAAOmC,EAAM4F,UAAU5H,GAAa,iCAAiC;GAErE,IAAM6H,IAAkB,IAAIP,iBAAiB;GAC7CD,EAA0BE,UAAUM;GAEpC,IAAMC,IAASD,EAAgBC,QAE3BC,GAEAC,GACAC,GAEEC,IAAiB7E,EAAS6E,gBAC1BC,IAAoB7E,EAAW8E,gBAE/BC,IAAkB;IACtBC,WAAWtG,EAAMsG;IACjBC,WAAW;IACXE,cAAczG,EAAM0G;IACrB;GAEDvD,EAAOwD,iBAAiB,EACtBC,OAAO;IACLC,MAAM;IACNC,QAAQT;IACV,EACD,CAAC;GAEF,IAAMU,IACJ1E,KAAehB,EAAS2F,iBAAiB,CAAC,CAACd;GAE7C,IAAI;IAEF,IAAI,CAACa,KAAkB1F,EAAS2F,iBAAiBd,GAAgB;KAC/D,IAAMe,IACJ3F,EAAW4F,qBAAqB5F,EAAW6F;KAC7C,IAAI;MACF,IAAKF,GA6DH7D,AATAA,EAAsBiF,aAAahB,QAAQ,EACzCnB,gBAAgBC,GACjB,CAAC,EAGFJ,IAAqB,MAAM7C,EAAcoF,gBAAgB,EACvDC,OAAOpC,GACR,CAAC,EAEF/C,EAAsBiF,aAAaD,UAAU;OAC3ClC,gBAAgBC;OAChBqC,QAAQzC,GAAoB0C;OAC7B,CAAC;WAhEY;OAiBd3C,AAdA1C,EAAsBgE,YAAYC,QAAQ,EAAEnB,mBAAgB,CAAC,EAE7DF,IAAgB,MAAM/C,EAAaqE,aAAa,EAC9CC,eAAe,EACbrB,mBACF,EACD,CAAC,EAEF9C,EAAsBgE,YAAYI,KAAK;QACrCtB;QACA7F,QAAQ2F;QACT,CAAC,EAGFF,EAAO2B,gBAAgB;OAEvB,IAAMC,IAA0BvC,EAAgB;QAC9CT,MAAMsB;QACNlF;QACA6G,aAAahD,MAAS;SACpB3B,EAAOoB,IAAI,wBAAwB4B,GAAerB,EAAK;;QAE1D,CAAC;OAyBF3B,AAvBIpC,KACFA,EAAS;QACPE;QACA8G,QAAQ;QACR1C,iBAAiBc;QACjB6B,gBAAgBH;QAChBI,yBAAyB;SACvBF,QAAQ;SACRG,gBAAgB7B;SAChB8B,cAAc3G,EAAS4G;SACvBC,gBAAgB7G,EAAS8G;SAC3B;QACD,CAAC,EAGJlC,IAAmB,MAAMyB,GAEzBtE,EAAsBgE,YAAYgB,UAAU;QAC1ClC;QACA7F,QAAQ2F;QACR1F,WAAW2F;QACZ,CAAC,EAEFjD,EAAOoB,IAAI,0BAA0B6B,EAAiB;;cAgBjD/D,GAAO;MAad,MAZK+E,IAOH7D,EAAsBiF,aAAaK,OAAO;OACxCxC,gBAAgBC;OAChBjE,OAAOA;OACR,CAAC,GATFkB,EAAsBgE,YAAYsB,OAAO;OACvCxC;OACAhE,OAAOA;OACP7B,QAAQ2F;OACT,CAAC,EAOE9D;;;IAOVrE,AAFAiI,EAAO2B,gBAAgB,EAEvB5J,EAAO0C,GAAS,2BAA2B;IAE3C,IAAMoI,IAA+B;KACnC3I;KACA4I,WAAW5I,EAAM4I;KAClB;IAED,AAAI7C,MACF4C,EAAcE,cAAc,EAC1BC,qBAAqB/C,EAAmB0C,mBACzC;IAGH,IAAIM,GACAC;IAEJ,IAAIjC,GAAgB;KAClBlJ,EAAOkG,GAAa,iCAAiC;KAErD,IAAMkF,IAAW,MAAMlF,EAAYmF,kBAAkB;MACnDlJ;MACA4I,WAAW5I,EAAM4I;MAClB,CAAC,EAEI,EAAEO,aAAU,MAAM5E,EAAmB;MACzC6E,WAAW,CACT;OACEC,IAAIhI,EAAS8G;OACb5H;OACAoE,MAAMsE;OACNV,OAAO;OACPzH;OACD,CACF;MACDwI,cAAc,CACZ;OACEnB,SAAS9G,EAAS8G;OAClBjC,gBAAgB7E,EAAS6E;OACzB+B,OAAO5G,EAAS4G;OAChBnH,SAASO,EAASP;OACnB,CAAA;MAEJ,CAAC;KAMFqC,AAFA6F,KAAcO,MAHgB/E,EAAWgF,UAAU,EACjDJ,WAAWD,GACZ,CAAC,EAC4BtE,IAE9B1B,EAAOwD,iBAAiB,EACtBC,OAAO;MACLC,MAAM;MACNC,QAAQ;OACNxE,SAAS0G;OACT,GAAG3C;OACL;MACF,EACD,CAAC;WAOFlD,AALA4F,IAAa,MAAM9E,EAAawF,YAAY;KAC1Cd;KACA7C;KACD,CAAC,EAEF3C,EAAOwD,iBAAiB,EACtBC,OAAO;KACLC,MAAM;KACNC,QAAQ;MACNzG,QAAQ0I;MACR,GAAG1C;MACL;KACF,EACD,CAAC;IAOJ,AAAIN,KACFN,EAAgBM,EAAmB2D,iBAAiB;IAGtD,IAAIC,GACAC;IAEJ,IAAIZ,GAAa;KACf,IAAMa,IAA0BzE,EAAkB,EAChDP,IAAImE,GACL,CAAC,CAACc,MAAMC,MAAWA,EAAO/E,WAAW+E,EAAO/E,SAASC,SAAS,GAAG;KAmBlE,AAjBAjC,EAAOoB,IAAI,kCAAkC4E,EAAY,EAErDpI,KACFA,EAAS;MACPE;MACAwB,SAAS0G;MACTpB,QAAQ;MACRC,gBAAgBgC;MAChB/B,yBAAyB;OACvBF,QAAQ;OACRoC,aAAahK;OACf;MACD,CAAC,EAGJ2J,IAAmB,MAAME,GAErBF,KACFxG,EAAOwD,iBAAiB,EACtBC,OAAO;MACLC,MAAM;MACNC,QAAQ;OACNxE,SAAS0G;OACTiB,cAAcN;OACd,GAAGtD;OACL;MACF,EACD,CAAC;WAEC,IAAI0C,GAAY;KACrB,IAAMmB,IAAuB/E,EAAgB;MAC3CT,MAAMqE;MACNjI;MACA6G,aAAahD,MAAS;OACpB3B,EAAOoB,IAAI,qBAAqB2E,GAAYpE,EAAK;;MAEpD,CAAC;KAmBFxB,AAjBAH,EAAOoB,IAAI,iCAAiC2E,EAAW,EAEnDnI,KACFA,EAAS;MACPE;MACAoE,iBAAiB6D;MACjBnB,QAAQ;MACRC,gBAAgBqC;MAChBpC,yBAAyB;OACvBF,QAAQ;OACRoC,aAAahK;OACf;MACD,CAAC,EAGJ4J,IAAgB,MAAMM,GAEtB/G,EAAOwD,iBAAiB,EACtBC,OAAO;MACLC,MAAM;MACNC,QAAQ;OACNzG,QAAQ0I;OACRzI,WAAWsJ;OACX,GAAGvD;OACL;MACF,EACD,CAAC;;IAKJ,OAFArD,EAAOoB,IAAI,uBAAuBuF,KAAoBC,EAAc,EAE7D;KACL1J,eAAeJ;KACfK,SAAS;MACPE,QAAQ2F;MACRxE,SAASyE;MACV;KACD7F,MAAM;MACJC,QAAQ0I;MACRzI,WAAWsJ;MACX5J;MACD;KACDO;KACAC,iBAAiBR,EAAM4F;KACxB;YACM1D,GAAO;IAcd,MAbAiB,EAAOwD,iBAAiB,EACtBC,OAAO;KACLC,MAAM;KACNC,QAAQ;MACN,GAAGT;MACHnE,OAAOA;MACT;KACF,EACD,CAAC,EAEE6D,KACFL,EAAWK,EAAmB2D,iBAAiB,EAE3CxH;;;EAMRmI,aAAa,CAACvH,EAAuB;EACrCqB,YAAYQ,MAAS;GACnB3B,EAAOoB,IAAI,2BAA2BO,EAAK;;EAE7CN,UAAUnC,MAAU;GAClBc,EAAOd,MAAM,yBAAyBA,EAAM;;EAE9CoI,iBAAiB;GACftH,EAAOoB,IAAI,0BAA0B;;EAExC,CAAC,EAEIrD,IAAsBoJ,EAAgBV,aAEtCvI,UAAc;EAKlBiJ,AAJAlH,EAAa/B,OAAO,EACpBgC,EAAchC,OAAO,EACrB+C,EAAa/C,OAAO,EACpBsD,EAAWtD,OAAO,EAClBiJ,EAAgBjJ,OAAO;;CAWzB,OAAO;EACLhB,eAAeJ;EACfgB;EACAC;EACAG;EACAC;EACAC,YAbAJ,OAEAE,GAAO,EACAH,EAAoBC,EAAQ;EAWnCK;EACAC;EACAC;EACAa;EACAL,WAAWoI,EAAgBpI;EAC3BE,WAAWkI,EAAgBlI;EAC3BD,SAASmI,EAAgBnI;EACzBE,OAAOiI,EAAgBjI;EACvBW,QAAQsH,EAAgBxF;EACzB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFillOtcOrderStep.js","names":["FillOtcOrderStep","FillOtcOrderStepKey","useFillOtcOrderFlow","SubmitFillOtcOrderResult","UseFillOtcOrderFlowInput","UseFillOtcOrderFlowResult","useLogger","isUserCancelledError","constructTxLinkForChain","getStandaloneTxHash","UseFillOtcOrderStepResult","startFillOtcOrder","reset","cancelFlow","retryFlow","isFlowCancellable","step","error","Error","erroredStep","result","tradeFlowType","explorerLink","useFillOtcOrderStep","options","$","_c","logger","fillOtcOrderFlow","runFillOtcOrderFlow","once","permitSigningHappeningOrNeverHappened","signPermit","isPending","isPermitSigned","approvalHappeningOrNeverHappened","approval","isSuccess","willUsePermit","needsApproval","isPermitSupported","isPermitReadyToSign","fillOrderBatch","canBatchTxs","permitOrApprovalHappeningOrNeverHappened","fillOrder","isConfirmingTX","isConfirmingCalls","permitOrApprovalHappened","txHash","signature","isTxPending","isCallsPending","approvalIsStarted","key","subStep","inFillTxConfirmation","notYetFillTxSent","isTxSent","isCallsSent","fillTxHash","transactionHash","chainId","undefined","log","t0","isError","isConfirmingTxError","isConfirmingCallsError","isTxAwaitingError","isCallsAwaitingError","t1"],"sources":["../../../../src/hooks/otc/tradeFlow/useFillOtcOrderStep.ts"],"sourcesContent":["import type {\n FillOtcOrderStep,\n FillOtcOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useFillOtcOrderFlow,\n type SubmitFillOtcOrderResult,\n type UseFillOtcOrderFlowInput,\n type UseFillOtcOrderFlowResult,\n} from \"./useFillOtcOrderFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { isUserCancelledError } from \"../../swap/tradeFlow/common/errors\";\nimport { constructTxLinkForChain } from \"@/lib/utils/explorer\";\nimport { getStandaloneTxHash } from \"@/transactions/hash\";\n\nexport type UseFillOtcOrderStepResult = {\n startFillOtcOrder: UseFillOtcOrderFlowResult[\"runFillOtcOrderFlow\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseFillOtcOrderFlowResult[\"reset\"];\n cancelFlow: UseFillOtcOrderFlowResult[\"cancelFlow\"];\n retryFlow: UseFillOtcOrderFlowResult[\"retryFlow\"];\n isFlowCancellable: boolean;\n step?: FillOtcOrderStep;\n error: Error | null;\n erroredStep?: FillOtcOrderStepKey;\n result?: SubmitFillOtcOrderResult;\n tradeFlowType: UseFillOtcOrderFlowResult[\"tradeFlowType\"];\n explorerLink?: string;\n};\n\nexport function useFillOtcOrderStep(\n options: UseFillOtcOrderFlowInput\n): UseFillOtcOrderStepResult {\n const logger = useLogger(\"FillOtcOrderStep\");\n const fillOtcOrderFlow = useFillOtcOrderFlow(options);\n\n const startFillOtcOrder = fillOtcOrderFlow.runFillOtcOrderFlow;\n const reset = fillOtcOrderFlow.reset;\n const cancelFlow = fillOtcOrderFlow.cancelFlow;\n const retryFlow = fillOtcOrderFlow.retryFlow;\n\n let step: FillOtcOrderStep | 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 fillOtcOrderFlow.signPermit.isPending ||\n !fillOtcOrderFlow.signPermit.isPermitSigned;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n fillOtcOrderFlow.approval.isPending || !fillOtcOrderFlow.approval.isSuccess;\n\n const willUsePermit =\n fillOtcOrderFlow.approval.needsApproval &&\n fillOtcOrderFlow.signPermit.isPermitSupported &&\n fillOtcOrderFlow.signPermit.isPermitReadyToSign &&\n !fillOtcOrderFlow.fillOrderBatch.canBatchTxs;\n\n const permitOrApprovalHappeningOrNeverHappened = willUsePermit\n ? permitSigningHappeningOrNeverHappened\n : approvalHappeningOrNeverHappened;\n\n if (\n fillOtcOrderFlow.approval.needsApproval &&\n permitOrApprovalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (\n fillOtcOrderFlow.fillOrder.isConfirmingTX ||\n fillOtcOrderFlow.fillOrderBatch.isConfirmingCalls\n ) {\n const permitOrApprovalHappened = !!(\n fillOtcOrderFlow.approval.txHash || fillOtcOrderFlow.signPermit.signature\n );\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (\n fillOtcOrderFlow.fillOrder.isTxPending ||\n fillOtcOrderFlow.fillOrderBatch.isCallsPending\n ) {\n step = { key: \"order-execution\" };\n } else if (fillOtcOrderFlow.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 fillOtcOrderFlow.approval.isTxPending;\n\n const inFillTxConfirmation =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const notYetFillTxSent =\n step?.key === \"order-execution\" &&\n !fillOtcOrderFlow.fillOrder.isTxSent &&\n !fillOtcOrderFlow.fillOrderBatch.isCallsSent;\n\n const isFlowCancellable =\n // final Tx is not yet submitted, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n approvalIsStarted || notYetFillTxSent || inFillTxConfirmation;\n\n const fillTxHash =\n // either last txHash from batch receipt\n fillOtcOrderFlow.fillOrderBatch.txHash ||\n // or standalone fill txHash\n getStandaloneTxHash({ transactionHash: fillOtcOrderFlow.fillOrder.txHash });\n const explorerLink = fillTxHash\n ? constructTxLinkForChain({\n chainId: fillOtcOrderFlow.chainId,\n txHash: fillTxHash,\n })\n : undefined;\n\n logger.once.log(\"step\", step, fillOtcOrderFlow, {\n isFlowCancellable,\n explorerLink,\n txHash: fillTxHash,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(fillOtcOrderFlow.error)\n ? null\n : fillOtcOrderFlow.error;\n\n let erroredStep: FillOtcOrderStepKey | undefined;\n\n if (fillOtcOrderFlow.isError) {\n if (\n fillOtcOrderFlow.approval.isError ||\n fillOtcOrderFlow.signPermit.isError ||\n fillOtcOrderFlow.fillOrder.isConfirmingTxError ||\n fillOtcOrderFlow.fillOrderBatch.isConfirmingCallsError\n ) {\n erroredStep = \"signature\";\n } else if (\n fillOtcOrderFlow.fillOrder.isTxAwaitingError ||\n fillOtcOrderFlow.fillOrderBatch.isCallsAwaitingError\n ) {\n erroredStep = \"order-execution\";\n }\n }\n\n return {\n startFillOtcOrder,\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 step,\n error,\n erroredStep,\n result: fillOtcOrderFlow.result,\n tradeFlowType: fillOtcOrderFlow.tradeFlowType,\n explorerLink,\n };\n}\n"],"mappings":";;;;;;;AA8BA,SAAOuB,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAGLC,IAAerB,EAAU,mBAAmB,EAC5CsB,IAAyB1B,EAAoBsB,EAAQ,EAErDb,IAA0BiB,EAAgBC,qBAC1CjB,IAAcgB,EAAgBhB,OAC9BC,IAAmBe,EAAgBf,YACnCC,IAAkBc,EAAgBd,WAAWQ,GAAAP,GAAAC;
|
|
1
|
+
{"version":3,"file":"useFillOtcOrderStep.js","names":["FillOtcOrderStep","FillOtcOrderStepKey","useFillOtcOrderFlow","SubmitFillOtcOrderResult","UseFillOtcOrderFlowInput","UseFillOtcOrderFlowResult","useLogger","isUserCancelledError","constructTxLinkForChain","getStandaloneTxHash","UseFillOtcOrderStepResult","startFillOtcOrder","reset","cancelFlow","retryFlow","isFlowCancellable","step","error","Error","erroredStep","result","tradeFlowType","explorerLink","useFillOtcOrderStep","options","$","_c","logger","fillOtcOrderFlow","runFillOtcOrderFlow","once","permitSigningHappeningOrNeverHappened","signPermit","isPending","isPermitSigned","approvalHappeningOrNeverHappened","approval","isSuccess","willUsePermit","needsApproval","isPermitSupported","isPermitReadyToSign","fillOrderBatch","canBatchTxs","permitOrApprovalHappeningOrNeverHappened","fillOrder","isConfirmingTX","isConfirmingCalls","permitOrApprovalHappened","txHash","signature","isTxPending","isCallsPending","approvalIsStarted","key","subStep","inFillTxConfirmation","notYetFillTxSent","isTxSent","isCallsSent","fillTxHash","transactionHash","chainId","undefined","log","t0","isError","isConfirmingTxError","isConfirmingCallsError","isTxAwaitingError","isCallsAwaitingError","t1"],"sources":["../../../../src/hooks/otc/tradeFlow/useFillOtcOrderStep.ts"],"sourcesContent":["import type {\n FillOtcOrderStep,\n FillOtcOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useFillOtcOrderFlow,\n type SubmitFillOtcOrderResult,\n type UseFillOtcOrderFlowInput,\n type UseFillOtcOrderFlowResult,\n} from \"./useFillOtcOrderFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { isUserCancelledError } from \"../../swap/tradeFlow/common/errors\";\nimport { constructTxLinkForChain } from \"@/lib/utils/explorer\";\nimport { getStandaloneTxHash } from \"@/transactions/hash\";\n\nexport type UseFillOtcOrderStepResult = {\n startFillOtcOrder: UseFillOtcOrderFlowResult[\"runFillOtcOrderFlow\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseFillOtcOrderFlowResult[\"reset\"];\n cancelFlow: UseFillOtcOrderFlowResult[\"cancelFlow\"];\n retryFlow: UseFillOtcOrderFlowResult[\"retryFlow\"];\n isFlowCancellable: boolean;\n step?: FillOtcOrderStep;\n error: Error | null;\n erroredStep?: FillOtcOrderStepKey;\n result?: SubmitFillOtcOrderResult;\n tradeFlowType: UseFillOtcOrderFlowResult[\"tradeFlowType\"];\n explorerLink?: string;\n};\n\nexport function useFillOtcOrderStep(\n options: UseFillOtcOrderFlowInput\n): UseFillOtcOrderStepResult {\n const logger = useLogger(\"FillOtcOrderStep\");\n const fillOtcOrderFlow = useFillOtcOrderFlow(options);\n\n const startFillOtcOrder = fillOtcOrderFlow.runFillOtcOrderFlow;\n const reset = fillOtcOrderFlow.reset;\n const cancelFlow = fillOtcOrderFlow.cancelFlow;\n const retryFlow = fillOtcOrderFlow.retryFlow;\n\n let step: FillOtcOrderStep | 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 fillOtcOrderFlow.signPermit.isPending ||\n !fillOtcOrderFlow.signPermit.isPermitSigned;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n fillOtcOrderFlow.approval.isPending || !fillOtcOrderFlow.approval.isSuccess;\n\n const willUsePermit =\n fillOtcOrderFlow.approval.needsApproval &&\n fillOtcOrderFlow.signPermit.isPermitSupported &&\n fillOtcOrderFlow.signPermit.isPermitReadyToSign &&\n !fillOtcOrderFlow.fillOrderBatch.canBatchTxs;\n\n const permitOrApprovalHappeningOrNeverHappened = willUsePermit\n ? permitSigningHappeningOrNeverHappened\n : approvalHappeningOrNeverHappened;\n\n if (\n fillOtcOrderFlow.approval.needsApproval &&\n permitOrApprovalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (\n fillOtcOrderFlow.fillOrder.isConfirmingTX ||\n fillOtcOrderFlow.fillOrderBatch.isConfirmingCalls\n ) {\n const permitOrApprovalHappened = !!(\n fillOtcOrderFlow.approval.txHash || fillOtcOrderFlow.signPermit.signature\n );\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (\n fillOtcOrderFlow.fillOrder.isTxPending ||\n fillOtcOrderFlow.fillOrderBatch.isCallsPending\n ) {\n step = { key: \"order-execution\" };\n } else if (fillOtcOrderFlow.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 fillOtcOrderFlow.approval.isTxPending;\n\n const inFillTxConfirmation =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const notYetFillTxSent =\n step?.key === \"order-execution\" &&\n !fillOtcOrderFlow.fillOrder.isTxSent &&\n !fillOtcOrderFlow.fillOrderBatch.isCallsSent;\n\n const isFlowCancellable =\n // final Tx is not yet submitted, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n approvalIsStarted || notYetFillTxSent || inFillTxConfirmation;\n\n const fillTxHash =\n // either last txHash from batch receipt\n fillOtcOrderFlow.fillOrderBatch.txHash ||\n // or standalone fill txHash\n getStandaloneTxHash({ transactionHash: fillOtcOrderFlow.fillOrder.txHash });\n const explorerLink = fillTxHash\n ? constructTxLinkForChain({\n chainId: fillOtcOrderFlow.chainId,\n txHash: fillTxHash,\n })\n : undefined;\n\n logger.once.log(\"step\", step, fillOtcOrderFlow, {\n isFlowCancellable,\n explorerLink,\n txHash: fillTxHash,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(fillOtcOrderFlow.error)\n ? null\n : fillOtcOrderFlow.error;\n\n let erroredStep: FillOtcOrderStepKey | undefined;\n\n if (fillOtcOrderFlow.isError) {\n if (\n fillOtcOrderFlow.approval.isError ||\n fillOtcOrderFlow.signPermit.isError ||\n fillOtcOrderFlow.fillOrder.isConfirmingTxError ||\n fillOtcOrderFlow.fillOrderBatch.isConfirmingCallsError\n ) {\n erroredStep = \"signature\";\n } else if (\n fillOtcOrderFlow.fillOrder.isTxAwaitingError ||\n fillOtcOrderFlow.fillOrderBatch.isCallsAwaitingError\n ) {\n erroredStep = \"order-execution\";\n }\n }\n\n return {\n startFillOtcOrder,\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 step,\n error,\n erroredStep,\n result: fillOtcOrderFlow.result,\n tradeFlowType: fillOtcOrderFlow.tradeFlowType,\n explorerLink,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOtcOrderFlow.js","names":["useAccount","useChainId","assert","useEnsureTxReceipt","Address","Hash","TransactionReceipt","ApprovalFlowResult","SubmitTxResult","useCreateLimitOrder","useCancelOtcOrderAndWait","useCancelOtcOrderEventCallbacks","useMinViemClient","useMutation","useRef","SupportedChainId","UserCancelledError","handleTxSent","CallsSentObject","TxSentObject","useApproveOrPermit","useLogger","LimitOrderFromApi","useOtcDeadline","useOtcReceiverAddressValue","useLimitOrderByHashQuery","useWidgetEvents","shouldApproveOrBatchWrapAndApprove","useBatchWrapAndApprove","BatchTxStepResult","useChainMatches","useSwitchChainWithGuard","CancelOrderStepKey","otcOrderFlowType","UserDefinedOtcPrice","srcTokenAddress","destTokenAddress","srcAmount","destAmount","UseOtcOrderFlowInput","otcPrice","preWrapETH","SubmitOtcOrderResult","tradeFlowType","approve","wrapAndApproveBatch","otcOrder","sentOrder","lastOrderState","account","receiverAddress","OnTxSent","txSent","RunOtcOrderOptions","onTxSent","UseOtcOrderFlowResult","chainId","runOtcOrderFlow","options","Promise","reset","cancelFlow","retryFlow","cancelOtcOrder","approval","wrapAndApprovalBatch","otcOrderSubmission","order","isCreatingOrder","isOrderSent","isPending","isError","isSuccess","error","Error","otcOrderCancelation","txHash","receipt","isCancelingOrder","isOrderCanceled","step","result","OTC_ORDER_MUTATION_KEY","useOtcOrderFlow","logger","approveTxMut","events","approveOrPermitEvents","srcToken","spenderContractType","swapSide","tradeMode","address","minClient","batchWrapAndApprove","resetBatchWrapAndApprove","canBatchTxs","wrapAndApproveBatchResult","createOrderMut","client","mutationOptions","onSuccess","log","onError","data","limitOrderQuery","orderParams","orderHash","cancelOrderEvents","orderChainId","forcedChainMatchesWalletChain","mutateAsync","switchChain","cancelOrderMut","onMutate","variables","txReceipt","vars","isCancelTxSucceeded","status","isCancelTxReverted","state","const","transactionHash","ensureTxReceipt","currentAbortControllerRef","AbortController","current","abort","deadline","onOTCOrder","submitOtcOrder","abortController","signal","approveTxHash","approveTxReceipt","allowanceToSet","shouldDoApprovalTx","shouldWrapAndApproveBatch","sendCallsResult","wrapAmount","BigInt","lastCallsReceipt","receipts","length","callsId","id","callsReceipt","onApproveTx","request","approveAsync","allowanceData","sent","throwIfAborted","approveTxReceiptPromise","hash","onReplaced","action","receiptPromise","transactionSpecificData","approvedAmount","tokenAddress","token","spenderAddress","spender","confirmed","failed","event","name","params","price","orderFromAPI","orderInput","expiry","makerAsset","takerAsset","makerAmount","takerAmount","maker","taker","otcOrderMut","mutationFn","mutationKey","onSettled","orderToCancel","cancelledOrder"],"sources":["../../../../src/hooks/otc/tradeFlow/useOtcOrderFlow.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 {\n ApprovalFlowResult,\n SubmitTxResult,\n} from \"../../swap/tradeFlow/common/types\";\nimport { useCreateLimitOrder } from \"../mutations/useCreateLimitOrder\";\nimport {\n useCancelOtcOrderAndWait,\n useCancelOtcOrderEventCallbacks,\n} from \"../mutations/useCancelLimitOrder\";\n\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 \"../../swap/tradeFlow/common/errors\";\nimport {\n handleTxSent,\n type CallsSentObject,\n type TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"../../swap/tradeFlow/common/useApproveOrPermit\";\nimport { useLogger } from \"@/core/logger\";\n\nimport type { LimitOrderFromApi } from \"@velora-dex/sdk\";\nimport { useOtcDeadline } from \"@/core/otc/state/deadlineAtom\";\nimport { useOtcReceiverAddressValue } from \"@/core/otc/state/receiverAddressAtom\";\nimport { useLimitOrderByHashQuery } from \"../queries/useLimitOrders\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport {\n shouldApproveOrBatchWrapAndApprove,\n useBatchWrapAndApprove,\n} from \"@/hooks/swap/tradeFlow/common/useBatchWrapAndApprove\";\nimport type { BatchTxStepResult } from \"@/hooks/swap/tradeFlow/common/types\";\nimport { useChainMatches } from \"@/hooks/useChainMatches\";\nimport { useSwitchChainWithGuard } from \"@/hooks/useSwitchChainWithGuard\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\n\nconst otcOrderFlowType = \"otcOrder\";\n\nexport type UserDefinedOtcPrice = {\n srcTokenAddress: string;\n destTokenAddress: string;\n srcAmount: string;\n destAmount: string;\n};\n\nexport type UseOtcOrderFlowInput = {\n otcPrice?: UserDefinedOtcPrice;\n preWrapETH?: boolean;\n};\n\nexport type SubmitOtcOrderResult = {\n tradeFlowType: typeof otcOrderFlowType;\n approve: SubmitTxResult;\n wrapAndApproveBatch: SubmitTxResult;\n otcOrder: {\n sentOrder: LimitOrderFromApi;\n lastOrderState?: LimitOrderFromApi;\n };\n otcPrice: UserDefinedOtcPrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunOtcOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseOtcOrderFlowResult = {\n tradeFlowType: typeof otcOrderFlowType;\n chainId: SupportedChainId;\n runOtcOrderFlow: (\n options?: RunOtcOrderOptions\n ) => Promise<SubmitOtcOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunOtcOrderOptions) => Promise<SubmitOtcOrderResult>; // reset and retry flow\n cancelOtcOrder: () => void;\n approval: ApprovalFlowResult;\n wrapAndApprovalBatch: BatchTxStepResult;\n otcOrderSubmission: {\n order?: LimitOrderFromApi;\n isCreatingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n otcOrderCancelation: {\n txHash?: string;\n receipt?: TransactionReceipt;\n isCancelingOrder: boolean;\n isOrderCanceled: boolean;\n lastOrderState?: LimitOrderFromApi;\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?: SubmitOtcOrderResult;\n otcPrice?: UserDefinedOtcPrice;\n};\n\nconst OTC_ORDER_MUTATION_KEY = \"runOtcOrderFlow\";\n\nexport function useOtcOrderFlow({\n otcPrice,\n preWrapETH,\n}: UseOtcOrderFlowInput): UseOtcOrderFlowResult {\n const logger = useLogger(\"OtcOrderFlow\");\n const chainId = useChainId();\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n 3. await Approve tx\n */\n\n const {\n approval,\n approveTxMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: otcPrice?.srcTokenAddress,\n srcAmount: otcPrice?.srcAmount,\n spenderContractType: \"AugustusRFQ\",\n swapSide: \"SELL\",\n tradeMode: \"otc\",\n chainId,\n });\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n /* 2.2. Or submit Batch tx (Wrap ETH + Approve WETH) */\n const {\n batchWrapAndApprove,\n reset: resetBatchWrapAndApprove,\n canBatchTxs,\n wrapAndApproveBatchResult: wrapAndApprovalBatch,\n } = useBatchWrapAndApprove({\n chainId,\n account,\n logger,\n tradeMode: \"otc\",\n });\n\n /* 4. Build and Submit OTC Order */\n const createOrderMut = useCreateLimitOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create OTC Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create OTC Order error\", error);\n },\n },\n });\n\n const otcOrderSubmission: UseOtcOrderFlowResult[\"otcOrderSubmission\"] = {\n order: createOrderMut.data,\n isCreatingOrder: createOrderMut.isPending,\n isOrderSent: createOrderMut.isSuccess,\n isPending: createOrderMut.isPending,\n isError: createOrderMut.isError,\n isSuccess: createOrderMut.isSuccess,\n error: createOrderMut.error,\n };\n\n /// CANCELATION\n\n const limitOrderQuery = useLimitOrderByHashQuery({\n orderParams: otcOrderSubmission.order?.orderHash,\n });\n\n const cancelOrderEvents = useCancelOtcOrderEventCallbacks(\n otcOrderSubmission.order\n );\n\n const orderChainId = otcOrderSubmission.order?.chainId as\n | SupportedChainId\n | undefined;\n const { forcedChainMatchesWalletChain } = useChainMatches(orderChainId);\n const { mutateAsync: switchChain } = useSwitchChainWithGuard();\n\n const cancelOrderMut = useCancelOtcOrderAndWait({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onMutate: async (variables) => {\n assert(orderChainId, \"orderChainId is undefined\");\n if (!forcedChainMatchesWalletChain) {\n await switchChain({\n chainId: orderChainId,\n });\n }\n cancelOrderEvents.onMutate?.(variables);\n },\n onSuccess: (txReceipt, vars) => {\n logger.log(\"Cancel Order success\", txReceipt);\n\n cancelOrderEvents.onSuccess?.(txReceipt, vars);\n },\n onError: (error, vars) => {\n logger.error(\"Cancel Order error\", error);\n cancelOrderEvents.onError?.(error, vars);\n },\n },\n });\n\n const isCancelTxSucceeded = cancelOrderMut.result?.status === \"success\";\n const isCancelTxReverted = cancelOrderMut.result?.status === \"reverted\";\n\n const lastOrderState =\n limitOrderQuery.data && isCancelTxSucceeded && cancelOrderMut.result\n ? {\n // optimistically update order state to CANCELLED\n // because API won't return the updated order state immediately\n // as it depends on the subgraph indexing\n ...limitOrderQuery.data,\n state: \"CANCELLED\" as const,\n transactionHash: cancelOrderMut.result.transactionHash,\n }\n : limitOrderQuery.data;\n\n const otcOrderCancelation: UseOtcOrderFlowResult[\"otcOrderCancelation\"] = {\n txHash: cancelOrderMut.txHash,\n receipt: cancelOrderMut.receipt,\n isCancelingOrder: cancelOrderMut.isPending,\n isOrderCanceled: isCancelTxSucceeded,\n lastOrderState,\n isPending: cancelOrderMut.isPending,\n isError: cancelOrderMut.isError || isCancelTxReverted,\n isSuccess: cancelOrderMut.isSuccess && isCancelTxSucceeded,\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 receiverAddress = useOtcReceiverAddressValue();\n const deadline = useOtcDeadline();\n\n const { onOTCOrder } = useWidgetEvents();\n\n const submitOtcOrder = async ({\n onTxSent,\n }: RunOtcOrderOptions = {}): Promise<SubmitOtcOrderResult> => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n createOrderMut.reset();\n cancelOrderMut.reset();\n resetBatchWrapAndApprove();\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(otcPrice, \"Otc 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 let wrapAndApproveBatch: SubmitTxResult = {};\n\n const allowanceToSet = approval.allowanceToSet;\n\n const { shouldDoApprovalTx, shouldWrapAndApproveBatch } =\n shouldApproveOrBatchWrapAndApprove({\n approval,\n preWrapETH,\n canBatchTxs,\n });\n\n try {\n if (shouldWrapAndApproveBatch) {\n const sendCallsResult = await batchWrapAndApprove({\n approval,\n preWrapETH: {\n wrapAmount: BigInt(otcPrice.srcAmount),\n },\n onTxSent,\n signal,\n });\n\n const lastCallsReceipt =\n sendCallsResult?.receipts?.[sendCallsResult.receipts.length - 1];\n wrapAndApproveBatch = {\n callsId: sendCallsResult?.id,\n callsReceipt: lastCallsReceipt,\n };\n\n logger.log(\"~ wrap and approve batch tx ~ receipt:\", lastCallsReceipt);\n } else 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 logger.error(\"Approve tx error\", 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 assert(otcPrice, \"otcPrice is not available\");\n assert(receiverAddress, \"Receiver address is not set\");\n\n onOTCOrder?.({\n event: {\n name: \"OTCOrder:request\",\n params: {\n price: otcPrice,\n },\n },\n });\n\n const orderFromAPI = await createOrderMut.mutateAsync({\n signal,\n orderInput: {\n expiry: deadline,\n makerAsset: otcPrice.srcTokenAddress,\n takerAsset: otcPrice.destTokenAddress,\n makerAmount: otcPrice.srcAmount,\n takerAmount: otcPrice.destAmount,\n maker: account,\n taker: receiverAddress,\n },\n });\n\n onOTCOrder?.({\n event: {\n name: \"OTCOrder:sent\",\n params: {\n price: otcPrice,\n order: orderFromAPI,\n },\n },\n });\n\n return {\n tradeFlowType: otcOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n wrapAndApproveBatch,\n otcOrder: {\n sentOrder: orderFromAPI,\n },\n otcPrice: otcPrice,\n account,\n receiverAddress,\n };\n } catch (error) {\n logger.error(\"Order submission error\", error);\n onOTCOrder?.({\n event: {\n name: \"OTCOrder:failed\",\n params: {\n price: otcPrice,\n error: error as Error,\n },\n },\n });\n throw error;\n }\n };\n\n const otcOrderMut = useMutation({\n mutationFn: submitOtcOrder,\n mutationKey: [OTC_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 runOtcOrderFlow = otcOrderMut.mutateAsync;\n const cancelOtcOrder = async () => {\n const orderToCancel = otcOrderSubmission.order;\n assert(orderToCancel, \"No order to cancel\");\n return cancelOrderMut.cancelOtcOrder({\n orderHash: orderToCancel.orderHash,\n onTxSent: ({ chainId, transactionHash, receiptPromise }) => {\n handleTxSent({\n chainId,\n transactionHash,\n action: \"cancelOtcOrder\",\n transactionSpecificData: {\n action: \"cancelOtcOrder\",\n cancelledOrder: orderToCancel,\n },\n receiptPromise,\n });\n cancelOrderEvents.onTxSent?.({\n chainId,\n txHash: transactionHash,\n });\n },\n });\n };\n\n const reset = () => {\n approveTxMut.reset();\n createOrderMut.reset();\n otcOrderMut.reset();\n cancelOrderMut.reset();\n resetBatchWrapAndApprove();\n };\n\n const retryFlow = (\n options?: RunOtcOrderOptions\n ): Promise<SubmitOtcOrderResult> => {\n reset();\n return runOtcOrderFlow(options);\n };\n\n /* 5. return result */\n\n let result = otcOrderMut.data;\n if (result && otcOrderCancelation.lastOrderState) {\n result = {\n ...result,\n otcOrder: {\n sentOrder: result.otcOrder.sentOrder,\n lastOrderState: otcOrderCancelation.lastOrderState,\n },\n };\n }\n\n return {\n tradeFlowType: otcOrderFlowType,\n chainId,\n runOtcOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelOtcOrder,\n approval,\n wrapAndApprovalBatch,\n otcOrderSubmission,\n otcOrderCancelation,\n // otcOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: otcOrderMut.isPending,\n isSuccess: otcOrderSubmission.isSuccess, // approval is an optional step\n isError: otcOrderMut.isError,\n error: otcOrderMut.error,\n result,\n otcPrice,\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useOtcOrderFlow.js","names":["useAccount","useChainId","assert","useEnsureTxReceipt","Address","Hash","TransactionReceipt","ApprovalFlowResult","SubmitTxResult","useCreateLimitOrder","useCancelOtcOrderAndWait","useCancelOtcOrderEventCallbacks","useMinViemClient","useMutation","useRef","SupportedChainId","UserCancelledError","handleTxSent","CallsSentObject","TxSentObject","useApproveOrPermit","useLogger","LimitOrderFromApi","useOtcDeadline","useOtcReceiverAddressValue","useLimitOrderByHashQuery","useWidgetEvents","shouldApproveOrBatchWrapAndApprove","useBatchWrapAndApprove","BatchTxStepResult","useChainMatches","useSwitchChainWithGuard","CancelOrderStepKey","otcOrderFlowType","UserDefinedOtcPrice","srcTokenAddress","destTokenAddress","srcAmount","destAmount","UseOtcOrderFlowInput","otcPrice","preWrapETH","SubmitOtcOrderResult","tradeFlowType","approve","wrapAndApproveBatch","otcOrder","sentOrder","lastOrderState","account","receiverAddress","OnTxSent","txSent","RunOtcOrderOptions","onTxSent","UseOtcOrderFlowResult","chainId","runOtcOrderFlow","options","Promise","reset","cancelFlow","retryFlow","cancelOtcOrder","approval","wrapAndApprovalBatch","otcOrderSubmission","order","isCreatingOrder","isOrderSent","isPending","isError","isSuccess","error","Error","otcOrderCancelation","txHash","receipt","isCancelingOrder","isOrderCanceled","step","result","OTC_ORDER_MUTATION_KEY","useOtcOrderFlow","logger","approveTxMut","events","approveOrPermitEvents","srcToken","spenderContractType","swapSide","tradeMode","address","minClient","batchWrapAndApprove","resetBatchWrapAndApprove","canBatchTxs","wrapAndApproveBatchResult","createOrderMut","client","mutationOptions","onSuccess","log","onError","data","limitOrderQuery","orderParams","orderHash","cancelOrderEvents","orderChainId","forcedChainMatchesWalletChain","mutateAsync","switchChain","cancelOrderMut","onMutate","variables","txReceipt","vars","isCancelTxSucceeded","status","isCancelTxReverted","state","const","transactionHash","ensureTxReceipt","currentAbortControllerRef","AbortController","current","abort","deadline","onOTCOrder","submitOtcOrder","abortController","signal","approveTxHash","approveTxReceipt","allowanceToSet","shouldDoApprovalTx","shouldWrapAndApproveBatch","sendCallsResult","wrapAmount","BigInt","lastCallsReceipt","receipts","length","callsId","id","callsReceipt","onApproveTx","request","approveAsync","allowanceData","sent","throwIfAborted","approveTxReceiptPromise","hash","onReplaced","action","receiptPromise","transactionSpecificData","approvedAmount","tokenAddress","token","spenderAddress","spender","confirmed","failed","event","name","params","price","orderFromAPI","orderInput","expiry","makerAsset","takerAsset","makerAmount","takerAmount","maker","taker","otcOrderMut","mutationFn","mutationKey","onSettled","orderToCancel","cancelledOrder"],"sources":["../../../../src/hooks/otc/tradeFlow/useOtcOrderFlow.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 {\n ApprovalFlowResult,\n SubmitTxResult,\n} from \"../../swap/tradeFlow/common/types\";\nimport { useCreateLimitOrder } from \"../mutations/useCreateLimitOrder\";\nimport {\n useCancelOtcOrderAndWait,\n useCancelOtcOrderEventCallbacks,\n} from \"../mutations/useCancelLimitOrder\";\n\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 \"../../swap/tradeFlow/common/errors\";\nimport {\n handleTxSent,\n type CallsSentObject,\n type TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"../../swap/tradeFlow/common/useApproveOrPermit\";\nimport { useLogger } from \"@/core/logger\";\n\nimport type { LimitOrderFromApi } from \"@velora-dex/sdk\";\nimport { useOtcDeadline } from \"@/core/otc/state/deadlineAtom\";\nimport { useOtcReceiverAddressValue } from \"@/core/otc/state/receiverAddressAtom\";\nimport { useLimitOrderByHashQuery } from \"../queries/useLimitOrders\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport {\n shouldApproveOrBatchWrapAndApprove,\n useBatchWrapAndApprove,\n} from \"@/hooks/swap/tradeFlow/common/useBatchWrapAndApprove\";\nimport type { BatchTxStepResult } from \"@/hooks/swap/tradeFlow/common/types\";\nimport { useChainMatches } from \"@/hooks/useChainMatches\";\nimport { useSwitchChainWithGuard } from \"@/hooks/useSwitchChainWithGuard\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\n\nconst otcOrderFlowType = \"otcOrder\";\n\nexport type UserDefinedOtcPrice = {\n srcTokenAddress: string;\n destTokenAddress: string;\n srcAmount: string;\n destAmount: string;\n};\n\nexport type UseOtcOrderFlowInput = {\n otcPrice?: UserDefinedOtcPrice;\n preWrapETH?: boolean;\n};\n\nexport type SubmitOtcOrderResult = {\n tradeFlowType: typeof otcOrderFlowType;\n approve: SubmitTxResult;\n wrapAndApproveBatch: SubmitTxResult;\n otcOrder: {\n sentOrder: LimitOrderFromApi;\n lastOrderState?: LimitOrderFromApi;\n };\n otcPrice: UserDefinedOtcPrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunOtcOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseOtcOrderFlowResult = {\n tradeFlowType: typeof otcOrderFlowType;\n chainId: SupportedChainId;\n runOtcOrderFlow: (\n options?: RunOtcOrderOptions\n ) => Promise<SubmitOtcOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunOtcOrderOptions) => Promise<SubmitOtcOrderResult>; // reset and retry flow\n cancelOtcOrder: () => void;\n approval: ApprovalFlowResult;\n wrapAndApprovalBatch: BatchTxStepResult;\n otcOrderSubmission: {\n order?: LimitOrderFromApi;\n isCreatingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n otcOrderCancelation: {\n txHash?: string;\n receipt?: TransactionReceipt;\n isCancelingOrder: boolean;\n isOrderCanceled: boolean;\n lastOrderState?: LimitOrderFromApi;\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?: SubmitOtcOrderResult;\n otcPrice?: UserDefinedOtcPrice;\n};\n\nconst OTC_ORDER_MUTATION_KEY = \"runOtcOrderFlow\";\n\nexport function useOtcOrderFlow({\n otcPrice,\n preWrapETH,\n}: UseOtcOrderFlowInput): UseOtcOrderFlowResult {\n const logger = useLogger(\"OtcOrderFlow\");\n const chainId = useChainId();\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n 3. await Approve tx\n */\n\n const {\n approval,\n approveTxMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: otcPrice?.srcTokenAddress,\n srcAmount: otcPrice?.srcAmount,\n spenderContractType: \"AugustusRFQ\",\n swapSide: \"SELL\",\n tradeMode: \"otc\",\n chainId,\n });\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n /* 2.2. Or submit Batch tx (Wrap ETH + Approve WETH) */\n const {\n batchWrapAndApprove,\n reset: resetBatchWrapAndApprove,\n canBatchTxs,\n wrapAndApproveBatchResult: wrapAndApprovalBatch,\n } = useBatchWrapAndApprove({\n chainId,\n account,\n logger,\n tradeMode: \"otc\",\n });\n\n /* 4. Build and Submit OTC Order */\n const createOrderMut = useCreateLimitOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create OTC Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create OTC Order error\", error);\n },\n },\n });\n\n const otcOrderSubmission: UseOtcOrderFlowResult[\"otcOrderSubmission\"] = {\n order: createOrderMut.data,\n isCreatingOrder: createOrderMut.isPending,\n isOrderSent: createOrderMut.isSuccess,\n isPending: createOrderMut.isPending,\n isError: createOrderMut.isError,\n isSuccess: createOrderMut.isSuccess,\n error: createOrderMut.error,\n };\n\n /// CANCELATION\n\n const limitOrderQuery = useLimitOrderByHashQuery({\n orderParams: otcOrderSubmission.order?.orderHash,\n });\n\n const cancelOrderEvents = useCancelOtcOrderEventCallbacks(\n otcOrderSubmission.order\n );\n\n const orderChainId = otcOrderSubmission.order?.chainId as\n | SupportedChainId\n | undefined;\n const { forcedChainMatchesWalletChain } = useChainMatches(orderChainId);\n const { mutateAsync: switchChain } = useSwitchChainWithGuard();\n\n const cancelOrderMut = useCancelOtcOrderAndWait({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onMutate: async (variables) => {\n assert(orderChainId, \"orderChainId is undefined\");\n if (!forcedChainMatchesWalletChain) {\n await switchChain({\n chainId: orderChainId,\n });\n }\n cancelOrderEvents.onMutate?.(variables);\n },\n onSuccess: (txReceipt, vars) => {\n logger.log(\"Cancel Order success\", txReceipt);\n\n cancelOrderEvents.onSuccess?.(txReceipt, vars);\n },\n onError: (error, vars) => {\n logger.error(\"Cancel Order error\", error);\n cancelOrderEvents.onError?.(error, vars);\n },\n },\n });\n\n const isCancelTxSucceeded = cancelOrderMut.result?.status === \"success\";\n const isCancelTxReverted = cancelOrderMut.result?.status === \"reverted\";\n\n const lastOrderState =\n limitOrderQuery.data && isCancelTxSucceeded && cancelOrderMut.result\n ? {\n // optimistically update order state to CANCELLED\n // because API won't return the updated order state immediately\n // as it depends on the subgraph indexing\n ...limitOrderQuery.data,\n state: \"CANCELLED\" as const,\n transactionHash: cancelOrderMut.result.transactionHash,\n }\n : limitOrderQuery.data;\n\n const otcOrderCancelation: UseOtcOrderFlowResult[\"otcOrderCancelation\"] = {\n txHash: cancelOrderMut.txHash,\n receipt: cancelOrderMut.receipt,\n isCancelingOrder: cancelOrderMut.isPending,\n isOrderCanceled: isCancelTxSucceeded,\n lastOrderState,\n isPending: cancelOrderMut.isPending,\n isError: cancelOrderMut.isError || isCancelTxReverted,\n isSuccess: cancelOrderMut.isSuccess && isCancelTxSucceeded,\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 receiverAddress = useOtcReceiverAddressValue();\n const deadline = useOtcDeadline();\n\n const { onOTCOrder } = useWidgetEvents();\n\n const submitOtcOrder = async ({\n onTxSent,\n }: RunOtcOrderOptions = {}): Promise<SubmitOtcOrderResult> => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n createOrderMut.reset();\n cancelOrderMut.reset();\n resetBatchWrapAndApprove();\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(otcPrice, \"Otc 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 let wrapAndApproveBatch: SubmitTxResult = {};\n\n const allowanceToSet = approval.allowanceToSet;\n\n const { shouldDoApprovalTx, shouldWrapAndApproveBatch } =\n shouldApproveOrBatchWrapAndApprove({\n approval,\n preWrapETH,\n canBatchTxs,\n });\n\n try {\n if (shouldWrapAndApproveBatch) {\n const sendCallsResult = await batchWrapAndApprove({\n approval,\n preWrapETH: {\n wrapAmount: BigInt(otcPrice.srcAmount),\n },\n onTxSent,\n signal,\n });\n\n const lastCallsReceipt =\n sendCallsResult?.receipts?.[sendCallsResult.receipts.length - 1];\n wrapAndApproveBatch = {\n callsId: sendCallsResult?.id,\n callsReceipt: lastCallsReceipt,\n };\n\n logger.log(\"~ wrap and approve batch tx ~ receipt:\", lastCallsReceipt);\n } else 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 logger.error(\"Approve tx error\", 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 assert(otcPrice, \"otcPrice is not available\");\n assert(receiverAddress, \"Receiver address is not set\");\n\n onOTCOrder?.({\n event: {\n name: \"OTCOrder:request\",\n params: {\n price: otcPrice,\n },\n },\n });\n\n const orderFromAPI = await createOrderMut.mutateAsync({\n signal,\n orderInput: {\n expiry: deadline,\n makerAsset: otcPrice.srcTokenAddress,\n takerAsset: otcPrice.destTokenAddress,\n makerAmount: otcPrice.srcAmount,\n takerAmount: otcPrice.destAmount,\n maker: account,\n taker: receiverAddress,\n },\n });\n\n onOTCOrder?.({\n event: {\n name: \"OTCOrder:sent\",\n params: {\n price: otcPrice,\n order: orderFromAPI,\n },\n },\n });\n\n return {\n tradeFlowType: otcOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n wrapAndApproveBatch,\n otcOrder: {\n sentOrder: orderFromAPI,\n },\n otcPrice: otcPrice,\n account,\n receiverAddress,\n };\n } catch (error) {\n logger.error(\"Order submission error\", error);\n onOTCOrder?.({\n event: {\n name: \"OTCOrder:failed\",\n params: {\n price: otcPrice,\n error: error as Error,\n },\n },\n });\n throw error;\n }\n };\n\n const otcOrderMut = useMutation({\n mutationFn: submitOtcOrder,\n mutationKey: [OTC_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 runOtcOrderFlow = otcOrderMut.mutateAsync;\n const cancelOtcOrder = async () => {\n const orderToCancel = otcOrderSubmission.order;\n assert(orderToCancel, \"No order to cancel\");\n return cancelOrderMut.cancelOtcOrder({\n orderHash: orderToCancel.orderHash,\n onTxSent: ({ chainId, transactionHash, receiptPromise }) => {\n handleTxSent({\n chainId,\n transactionHash,\n action: \"cancelOtcOrder\",\n transactionSpecificData: {\n action: \"cancelOtcOrder\",\n cancelledOrder: orderToCancel,\n },\n receiptPromise,\n });\n cancelOrderEvents.onTxSent?.({\n chainId,\n txHash: transactionHash,\n });\n },\n });\n };\n\n const reset = () => {\n approveTxMut.reset();\n createOrderMut.reset();\n otcOrderMut.reset();\n cancelOrderMut.reset();\n resetBatchWrapAndApprove();\n };\n\n const retryFlow = (\n options?: RunOtcOrderOptions\n ): Promise<SubmitOtcOrderResult> => {\n reset();\n return runOtcOrderFlow(options);\n };\n\n /* 5. return result */\n\n let result = otcOrderMut.data;\n if (result && otcOrderCancelation.lastOrderState) {\n result = {\n ...result,\n otcOrder: {\n sentOrder: result.otcOrder.sentOrder,\n lastOrderState: otcOrderCancelation.lastOrderState,\n },\n };\n }\n\n return {\n tradeFlowType: otcOrderFlowType,\n chainId,\n runOtcOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelOtcOrder,\n approval,\n wrapAndApprovalBatch,\n otcOrderSubmission,\n otcOrderCancelation,\n // otcOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: otcOrderMut.isPending,\n isSuccess: otcOrderSubmission.isSuccess, // approval is an optional step\n isError: otcOrderMut.isError,\n error: otcOrderMut.error,\n result,\n otcPrice,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOtcOrderStep.js","names":["CancelOrderStepKey","OtcOrderStep","OtcOrderStepKey","useOtcOrderFlow","SubmitOtcOrderResult","UseOtcOrderFlowInput","UseOtcOrderFlowResult","useLogger","isUserCancelledError","LimitOrderStateChecker","UseOtcOrderStepResult","startOtcOrder","cancelOtcOrder","reset","cancelFlow","retryFlow","isFlowCancellable","isOrderCancellable","step","orderCancellationStep","error","Error","erroredStep","result","tradeFlowType","useOtcOrderStep","options","$","_c","logger","otcOrderFlow","runOtcOrderFlow","once","preWrapETH","wrapAndApproveBatchHappeningOrNeverHappened","approval","needsApproval","wrapAndApprovalBatch","isPending","isSuccess","approvalHappeningOrNeverHappened","otcOrderSubmission","permitOrApprovalHappened","txHash","approvalIsStarted","key","subStep","isTxPending","isOrderBeingSigned","lastOrderState","otcOrderCancelation","order","t0","cancellable","has","state","orderHash","log","isError","t1"],"sources":["../../../../src/hooks/otc/tradeFlow/useOtcOrderStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n OtcOrderStep,\n OtcOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useOtcOrderFlow,\n type SubmitOtcOrderResult,\n type UseOtcOrderFlowInput,\n type UseOtcOrderFlowResult,\n} from \"./useOtcOrderFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { isUserCancelledError } from \"../../swap/tradeFlow/common/errors\";\nimport { LimitOrderStateChecker } from \"../queries/utils\";\n\ntype UseOtcOrderStepResult = {\n startOtcOrder: UseOtcOrderFlowResult[\"runOtcOrderFlow\"];\n cancelOtcOrder: UseOtcOrderFlowResult[\"cancelOtcOrder\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseOtcOrderFlowResult[\"reset\"];\n cancelFlow: UseOtcOrderFlowResult[\"cancelFlow\"];\n retryFlow: UseOtcOrderFlowResult[\"retryFlow\"];\n isFlowCancellable: boolean;\n isOrderCancellable: boolean;\n step?: OtcOrderStep;\n orderCancellationStep?: CancelOrderStepKey;\n error: Error | null;\n erroredStep?: OtcOrderStepKey;\n result?: SubmitOtcOrderResult;\n tradeFlowType: UseOtcOrderFlowResult[\"tradeFlowType\"];\n};\n\nexport function useOtcOrderStep(\n options: UseOtcOrderFlowInput\n): UseOtcOrderStepResult {\n const logger = useLogger(\"OtcOrderStep\");\n const otcOrderFlow = useOtcOrderFlow(options);\n\n const startOtcOrder = otcOrderFlow.runOtcOrderFlow;\n const reset = otcOrderFlow.reset;\n const cancelFlow = otcOrderFlow.cancelFlow;\n const retryFlow = otcOrderFlow.retryFlow;\n\n let step: OtcOrderStep | undefined;\n\n const wrapAndApproveBatchHappeningOrNeverHappened =\n options.preWrapETH &&\n otcOrderFlow.approval.needsApproval &&\n (otcOrderFlow.wrapAndApprovalBatch.isPending ||\n !otcOrderFlow.wrapAndApprovalBatch.isSuccess);\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n otcOrderFlow.approval.isPending || !otcOrderFlow.approval.isSuccess;\n\n if (\n otcOrderFlow.approval.needsApproval &&\n (approvalHappeningOrNeverHappened ||\n wrapAndApproveBatchHappeningOrNeverHappened)\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (otcOrderFlow.otcOrderSubmission.isPending) {\n const permitOrApprovalHappened = !!otcOrderFlow.approval.txHash;\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (otcOrderFlow.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 otcOrderFlow.approval.isTxPending;\n\n const isOrderBeingSigned =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\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;\n\n const lastOrderState =\n otcOrderFlow.otcOrderCancelation.lastOrderState ||\n otcOrderFlow.otcOrderSubmission.order;\n\n const isOrderCancellable =\n !!lastOrderState && // @TODO fix edge case: this state won't be enough if order was expired while sitting in the drawer\n LimitOrderStateChecker.cancellable.has(lastOrderState.state);\n\n const orderHash = otcOrderFlow.otcOrderSubmission.order?.orderHash;\n\n logger.once.log(\"step\", step, otcOrderFlow, {\n isFlowCancellable,\n orderHash,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(otcOrderFlow.error)\n ? null\n : otcOrderFlow.error;\n\n let erroredStep: OtcOrderStepKey | undefined;\n\n if (otcOrderFlow.isError) {\n if (otcOrderFlow.approval.isError) {\n erroredStep = \"signature\";\n } else if (otcOrderFlow.otcOrderSubmission.isError) {\n erroredStep = \"order-submission\";\n }\n }\n\n return {\n startOtcOrder,\n cancelOtcOrder: otcOrderFlow.cancelOtcOrder,\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: otcOrderFlow.otcOrderCancelation.step,\n error,\n erroredStep,\n result: otcOrderFlow.result,\n tradeFlowType: otcOrderFlow.tradeFlowType,\n };\n}\n"],"mappings":";;;;;;AAgCA,SAAOyB,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAGLC,IAAetB,EAAU,eAAe,EACxCuB,IAAqB3B,EAAgBuB,EAAQ,EAE7Cf,IAAsBmB,EAAYC,iBAClClB,IAAciB,EAAYjB,OAC1BC,IAAmBgB,EAAYhB,YAC/BC,IAAkBe,EAAYf,WAAWC,GAAAC,GAAAC;
|
|
1
|
+
{"version":3,"file":"useOtcOrderStep.js","names":["CancelOrderStepKey","OtcOrderStep","OtcOrderStepKey","useOtcOrderFlow","SubmitOtcOrderResult","UseOtcOrderFlowInput","UseOtcOrderFlowResult","useLogger","isUserCancelledError","LimitOrderStateChecker","UseOtcOrderStepResult","startOtcOrder","cancelOtcOrder","reset","cancelFlow","retryFlow","isFlowCancellable","isOrderCancellable","step","orderCancellationStep","error","Error","erroredStep","result","tradeFlowType","useOtcOrderStep","options","$","_c","logger","otcOrderFlow","runOtcOrderFlow","once","preWrapETH","wrapAndApproveBatchHappeningOrNeverHappened","approval","needsApproval","wrapAndApprovalBatch","isPending","isSuccess","approvalHappeningOrNeverHappened","otcOrderSubmission","permitOrApprovalHappened","txHash","approvalIsStarted","key","subStep","isTxPending","isOrderBeingSigned","lastOrderState","otcOrderCancelation","order","t0","cancellable","has","state","orderHash","log","isError","t1"],"sources":["../../../../src/hooks/otc/tradeFlow/useOtcOrderStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n OtcOrderStep,\n OtcOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useOtcOrderFlow,\n type SubmitOtcOrderResult,\n type UseOtcOrderFlowInput,\n type UseOtcOrderFlowResult,\n} from \"./useOtcOrderFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { isUserCancelledError } from \"../../swap/tradeFlow/common/errors\";\nimport { LimitOrderStateChecker } from \"../queries/utils\";\n\ntype UseOtcOrderStepResult = {\n startOtcOrder: UseOtcOrderFlowResult[\"runOtcOrderFlow\"];\n cancelOtcOrder: UseOtcOrderFlowResult[\"cancelOtcOrder\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseOtcOrderFlowResult[\"reset\"];\n cancelFlow: UseOtcOrderFlowResult[\"cancelFlow\"];\n retryFlow: UseOtcOrderFlowResult[\"retryFlow\"];\n isFlowCancellable: boolean;\n isOrderCancellable: boolean;\n step?: OtcOrderStep;\n orderCancellationStep?: CancelOrderStepKey;\n error: Error | null;\n erroredStep?: OtcOrderStepKey;\n result?: SubmitOtcOrderResult;\n tradeFlowType: UseOtcOrderFlowResult[\"tradeFlowType\"];\n};\n\nexport function useOtcOrderStep(\n options: UseOtcOrderFlowInput\n): UseOtcOrderStepResult {\n const logger = useLogger(\"OtcOrderStep\");\n const otcOrderFlow = useOtcOrderFlow(options);\n\n const startOtcOrder = otcOrderFlow.runOtcOrderFlow;\n const reset = otcOrderFlow.reset;\n const cancelFlow = otcOrderFlow.cancelFlow;\n const retryFlow = otcOrderFlow.retryFlow;\n\n let step: OtcOrderStep | undefined;\n\n const wrapAndApproveBatchHappeningOrNeverHappened =\n options.preWrapETH &&\n otcOrderFlow.approval.needsApproval &&\n (otcOrderFlow.wrapAndApprovalBatch.isPending ||\n !otcOrderFlow.wrapAndApprovalBatch.isSuccess);\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n otcOrderFlow.approval.isPending || !otcOrderFlow.approval.isSuccess;\n\n if (\n otcOrderFlow.approval.needsApproval &&\n (approvalHappeningOrNeverHappened ||\n wrapAndApproveBatchHappeningOrNeverHappened)\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (otcOrderFlow.otcOrderSubmission.isPending) {\n const permitOrApprovalHappened = !!otcOrderFlow.approval.txHash;\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (otcOrderFlow.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 otcOrderFlow.approval.isTxPending;\n\n const isOrderBeingSigned =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\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;\n\n const lastOrderState =\n otcOrderFlow.otcOrderCancelation.lastOrderState ||\n otcOrderFlow.otcOrderSubmission.order;\n\n const isOrderCancellable =\n !!lastOrderState && // @TODO fix edge case: this state won't be enough if order was expired while sitting in the drawer\n LimitOrderStateChecker.cancellable.has(lastOrderState.state);\n\n const orderHash = otcOrderFlow.otcOrderSubmission.order?.orderHash;\n\n logger.once.log(\"step\", step, otcOrderFlow, {\n isFlowCancellable,\n orderHash,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(otcOrderFlow.error)\n ? null\n : otcOrderFlow.error;\n\n let erroredStep: OtcOrderStepKey | undefined;\n\n if (otcOrderFlow.isError) {\n if (otcOrderFlow.approval.isError) {\n erroredStep = \"signature\";\n } else if (otcOrderFlow.otcOrderSubmission.isError) {\n erroredStep = \"order-submission\";\n }\n }\n\n return {\n startOtcOrder,\n cancelOtcOrder: otcOrderFlow.cancelOtcOrder,\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: otcOrderFlow.otcOrderCancelation.step,\n error,\n erroredStep,\n result: otcOrderFlow.result,\n tradeFlowType: otcOrderFlow.tradeFlowType,\n };\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSignArbitraryTypedData.js","names":["useSignTypedData","Hash","useAccount","assert","SignTypedDataVariables","UseSignedArbitraryTypedDataInput","onSuccess","signature","onError","error","Error","UseSignedArbitraryTypedDataReturn","signTypedData","typedData","signTypedDataAsync","Promise","isPending","isSuccess","isError","reset","useSignArbitraryTypedData","t0","$","_c","t1","undefined","isConnected","data","t2","signTx","t3","typedData_0","signTxAsync","t4"],"sources":["../../../../../src/hooks/permit/hooks/common/useSignArbitraryTypedData.ts"],"sourcesContent":["import { useSignTypedData } from \"wagmi\";\nimport { type Hash } from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport type { SignTypedDataVariables } from \"wagmi/query\";\n\nexport type UseSignedArbitraryTypedDataInput = {\n onSuccess?: (signature: Hash) => void;\n onError?: (error: Error) => void;\n};\n\nexport type UseSignedArbitraryTypedDataReturn = {\n signTypedData: (typedData: SignTypedDataVariables) => void;\n signTypedDataAsync: (typedData: SignTypedDataVariables) => Promise<Hash>;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n signature?: Hash;\n reset: () => void;\n};\n\nexport const useSignArbitraryTypedData = ({\n onSuccess,\n onError,\n}: UseSignedArbitraryTypedDataInput = {}): UseSignedArbitraryTypedDataReturn => {\n const { isConnected } = useAccount();\n\n const {\n signTypedData,\n signTypedDataAsync,\n isPending,\n isSuccess,\n isError,\n error,\n data: signature,\n reset,\n } = useSignTypedData();\n\n const signTx = (typedData: SignTypedDataVariables) => {\n // Validate inputs using assert for better type safety\n assert(isConnected, \"Wallet not connected\");\n assert(typedData, \"Typed data is required\");\n\n // Execute signature\n signTypedData(typedData, {\n onSuccess,\n onError,\n });\n };\n\n const signTxAsync = async (\n typedData: SignTypedDataVariables\n ): Promise<Hash> => {\n // Validate inputs using assert for better type safety\n assert(isConnected, \"Wallet not connected\");\n assert(typedData, \"Typed data is required\");\n\n // Execute signature and return the hash\n return signTypedDataAsync(typedData, {\n onSuccess,\n onError,\n });\n };\n\n return {\n signTypedData: signTx,\n signTypedDataAsync: signTxAsync,\n isPending,\n isSuccess,\n isError,\n error,\n signature,\n reset,\n };\n};\n"],"mappings":";;;;;AAsBA,IAAaoB,KAA4BC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAAC;
|
|
1
|
+
{"version":3,"file":"useSignArbitraryTypedData.js","names":["useSignTypedData","Hash","useAccount","assert","SignTypedDataVariables","UseSignedArbitraryTypedDataInput","onSuccess","signature","onError","error","Error","UseSignedArbitraryTypedDataReturn","signTypedData","typedData","signTypedDataAsync","Promise","isPending","isSuccess","isError","reset","useSignArbitraryTypedData","t0","$","_c","t1","undefined","isConnected","data","t2","signTx","t3","typedData_0","signTxAsync","t4"],"sources":["../../../../../src/hooks/permit/hooks/common/useSignArbitraryTypedData.ts"],"sourcesContent":["import { useSignTypedData } from \"wagmi\";\nimport { type Hash } from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport type { SignTypedDataVariables } from \"wagmi/query\";\n\nexport type UseSignedArbitraryTypedDataInput = {\n onSuccess?: (signature: Hash) => void;\n onError?: (error: Error) => void;\n};\n\nexport type UseSignedArbitraryTypedDataReturn = {\n signTypedData: (typedData: SignTypedDataVariables) => void;\n signTypedDataAsync: (typedData: SignTypedDataVariables) => Promise<Hash>;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n signature?: Hash;\n reset: () => void;\n};\n\nexport const useSignArbitraryTypedData = ({\n onSuccess,\n onError,\n}: UseSignedArbitraryTypedDataInput = {}): UseSignedArbitraryTypedDataReturn => {\n const { isConnected } = useAccount();\n\n const {\n signTypedData,\n signTypedDataAsync,\n isPending,\n isSuccess,\n isError,\n error,\n data: signature,\n reset,\n } = useSignTypedData();\n\n const signTx = (typedData: SignTypedDataVariables) => {\n // Validate inputs using assert for better type safety\n assert(isConnected, \"Wallet not connected\");\n assert(typedData, \"Typed data is required\");\n\n // Execute signature\n signTypedData(typedData, {\n onSuccess,\n onError,\n });\n };\n\n const signTxAsync = async (\n typedData: SignTypedDataVariables\n ): Promise<Hash> => {\n // Validate inputs using assert for better type safety\n assert(isConnected, \"Wallet not connected\");\n assert(typedData, \"Typed data is required\");\n\n // Execute signature and return the hash\n return signTypedDataAsync(typedData, {\n onSuccess,\n onError,\n });\n };\n\n return {\n signTypedData: signTx,\n signTypedDataAsync: signTxAsync,\n isPending,\n isSuccess,\n isError,\n error,\n signature,\n reset,\n };\n};\n"],"mappings":";;;;;AAsBA,IAAaoB,KAA4BC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAAC;CAAA,AAAAF,EAAA,OAAAD,IAGDG,IAAAF,EAAA,MAHEE,IAAAH,MAAAI,KAAAA,IAAA,EAGF,GAHEJ,GAGFC,EAAA,KAAAD,GAAAC,EAAA,KAAAE;CAHE,IAAA,EAAAlB,cAAAE,eAAAgB,GAIxC,EAAAE,mBAAwBxB,GAAY,EAEpC,EAAAU,kBAAAE,uBAAAE,cAAAC,cAAAC,YAAAT,UAAAkB,MAAApB,GAAAY,aASInB,GAAkB,EAAC4B;CAAA,AAAAN,EAAA,OAAAI,KAAAJ,EAAA,OAAAd,KAAAc,EAAA,OAAAhB,KAAAgB,EAAA,OAAAV,KAERgB,KAAAf,MAAA;EAMbD,AAJAT,EAAOuB,GAAa,uBAAuB,EAC3CvB,EAAOU,GAAW,yBAAyB,EAG3CD,EAAcC,GAAW;GAAAP;GAAAE;GAGxB,CAAC;IACHc,EAAA,KAAAI,GAAAJ,EAAA,KAAAd,GAAAc,EAAA,KAAAhB,GAAAgB,EAAA,KAAAV,GAAAU,EAAA,KAAAM,KAAAA,IAAAN,EAAA;CAVD,IAAAO,IAAeD,GAUbE;CAAA,AAAAR,EAAA,OAAAI,KAAAJ,EAAA,OAAAd,KAAAc,EAAA,OAAAhB,KAAAgB,EAAA,QAAAR,KAEkBgB,IAAA,OAAAC,OAIlB5B,EAAOuB,GAAa,uBAAuB,EAC3CvB,EAAOU,GAAW,yBAAyB,EAGpCC,EAAmBD,GAAW;EAAAP;EAAAE;EAGpC,CAAC,GACHc,EAAA,KAAAI,GAAAJ,EAAA,KAAAd,GAAAc,EAAA,KAAAhB,GAAAgB,EAAA,MAAAR,GAAAQ,EAAA,MAAAQ,KAAAA,IAAAR,EAAA;CAZD,IAAAU,IAAoBF,GAYlBG;CAWD,OAXCX,EAAA,QAAAb,KAAAa,EAAA,QAAAJ,KAAAI,EAAA,QAAAN,KAAAM,EAAA,QAAAL,KAAAK,EAAA,QAAAH,KAAAG,EAAA,QAAAO,KAAAP,EAAA,QAAAU,KAAAV,EAAA,QAAAf,KAEK0B,IAAA;EAAArB,eACUiB;EAAMf,oBACDkB;EAAWhB;EAAAC;EAAAC;EAAAT;EAAAF;EAAAY;EAOhC,EAAAG,EAAA,MAAAb,GAAAa,EAAA,MAAAJ,GAAAI,EAAA,MAAAN,GAAAM,EAAA,MAAAL,GAAAK,EAAA,MAAAH,GAAAG,EAAA,MAAAO,GAAAP,EAAA,MAAAU,GAAAV,EAAA,MAAAf,GAAAe,EAAA,MAAAW,KAAAA,IAAAX,EAAA,KATMW"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSignPermit.js","names":["useSignArbitraryTypedData","UseSignedArbitraryTypedDataInput","constructPermitTypedData","PermitTypedDataInput","useSignPermit","t0","$","_c","t1","undefined","onSuccess","onError","t2","signTypedData","signTypedDataAsync","isPending","isSuccess","isError","error","signature","reset","t3","input","typedData","signPermit","t4","input_0","typedData_0","signPermitAsync","t5"],"sources":["../../../../../src/hooks/permit/hooks/common/useSignPermit.ts"],"sourcesContent":["import {\n useSignArbitraryTypedData,\n type UseSignedArbitraryTypedDataInput,\n} from \"./useSignArbitraryTypedData\";\nimport {\n constructPermitTypedData,\n type PermitTypedDataInput,\n} from \"../../utils/construct\";\n\nexport function useSignPermit({\n onSuccess,\n onError,\n}: UseSignedArbitraryTypedDataInput = {}) {\n const {\n signTypedData,\n signTypedDataAsync,\n isPending,\n isSuccess,\n isError,\n error,\n signature,\n reset,\n } = useSignArbitraryTypedData({ onSuccess, onError });\n\n const signPermit = (input: PermitTypedDataInput) => {\n const typedData = constructPermitTypedData(input);\n signTypedData(typedData);\n };\n\n const signPermitAsync = (input: PermitTypedDataInput) => {\n const typedData = constructPermitTypedData(input);\n return signTypedDataAsync(typedData);\n };\n\n return {\n signPermit,\n signPermitAsync,\n isPending,\n isSuccess,\n isError,\n error,\n signature,\n reset,\n };\n}\n"],"mappings":";;;;AASA,SAAOI,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAAC;
|
|
1
|
+
{"version":3,"file":"useSignPermit.js","names":["useSignArbitraryTypedData","UseSignedArbitraryTypedDataInput","constructPermitTypedData","PermitTypedDataInput","useSignPermit","t0","$","_c","t1","undefined","onSuccess","onError","t2","signTypedData","signTypedDataAsync","isPending","isSuccess","isError","error","signature","reset","t3","input","typedData","signPermit","t4","input_0","typedData_0","signPermitAsync","t5"],"sources":["../../../../../src/hooks/permit/hooks/common/useSignPermit.ts"],"sourcesContent":["import {\n useSignArbitraryTypedData,\n type UseSignedArbitraryTypedDataInput,\n} from \"./useSignArbitraryTypedData\";\nimport {\n constructPermitTypedData,\n type PermitTypedDataInput,\n} from \"../../utils/construct\";\n\nexport function useSignPermit({\n onSuccess,\n onError,\n}: UseSignedArbitraryTypedDataInput = {}) {\n const {\n signTypedData,\n signTypedDataAsync,\n isPending,\n isSuccess,\n isError,\n error,\n signature,\n reset,\n } = useSignArbitraryTypedData({ onSuccess, onError });\n\n const signPermit = (input: PermitTypedDataInput) => {\n const typedData = constructPermitTypedData(input);\n signTypedData(typedData);\n };\n\n const signPermitAsync = (input: PermitTypedDataInput) => {\n const typedData = constructPermitTypedData(input);\n return signTypedDataAsync(typedData);\n };\n\n return {\n signPermit,\n signPermitAsync,\n isPending,\n isSuccess,\n isError,\n error,\n signature,\n reset,\n };\n}\n"],"mappings":";;;;AASA,SAAOI,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAAC;CAAA,AAAAF,EAAA,OAAAD,IAGiCG,IAAAF,EAAA,MAHVE,IAAAH,MAAAI,KAAAA,IAAA,EAGU,GAHVJ,GAGUC,EAAA,KAAAD,GAAAC,EAAA,KAAAE;CAHV,IAAA,EAAAE,cAAAC,eAAAH,GAGUI;CAAA,AAAAN,EAAA,OAAAK,KAAAL,EAAA,OAAAI,KAURE,IAAA;EAAAF;EAAAC;EAAsB,EAAAL,EAAA,KAAAK,GAAAL,EAAA,KAAAI,GAAAJ,EAAA,KAAAM,KAAAA,IAAAN,EAAA;CATpD,IAAA,EAAAO,kBAAAC,uBAAAC,cAAAC,cAAAC,YAAAC,UAAAC,cAAAC,aASIpB,EAA0BY,EAAuB,EAACS;CAAA,AAAAf,EAAA,OAAAO,IAKrDQ,IAAAf,EAAA,MAHkBe,KAAAC,MAAA;EAEjBT,EADkBX,EAAyBoB,EAC7BC,CAAU;IACzBjB,EAAA,KAAAO,GAAAP,EAAA,KAAAe;CAHD,IAAAG,IAAmBH,GAGjBI;CAAA,AAAAnB,EAAA,OAAAQ,IAKDW,IAAAnB,EAAA,MAHuBmB,KAAAC,MAEfZ,EADWZ,EAAyBoB,EACjBC,CAAU,EACrCjB,EAAA,KAAAQ,GAAAR,EAAA,KAAAmB;CAHD,IAAAG,IAAwBH,GAGtBI;CAWD,OAXCvB,EAAA,OAAAY,KAAAZ,EAAA,QAAAW,KAAAX,EAAA,QAAAS,KAAAT,EAAA,QAAAU,KAAAV,EAAA,QAAAc,KAAAd,EAAA,QAAAkB,KAAAlB,EAAA,QAAAsB,KAAAtB,EAAA,QAAAa,KAEKU,IAAA;EAAAL;EAAAI;EAAAb;EAAAC;EAAAC;EAAAC;EAAAC;EAAAC;EASN,EAAAd,EAAA,KAAAY,GAAAZ,EAAA,MAAAW,GAAAX,EAAA,MAAAS,GAAAT,EAAA,MAAAU,GAAAV,EAAA,MAAAc,GAAAd,EAAA,MAAAkB,GAAAlB,EAAA,MAAAsB,GAAAtB,EAAA,MAAAa,GAAAb,EAAA,MAAAuB,KAAAA,IAAAvB,EAAA,KATMuB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWalletSupportsPermit.js","names":["useIsAccountContract","UseWalletSupportsPermitResult","permit1","permit2","useWalletSupportsPermit","$","_c","data","t0","t1","undefined","isContract","isDelegatedEOA","isWalletContract","isWalletDelegatedEOA","t2","t3","t4"],"sources":["../../../../../src/hooks/permit/hooks/common/useWalletSupportsPermit.ts"],"sourcesContent":["import { useIsAccountContract } from \"@/hooks/getCode/useIsAccountContract\";\n\ntype UseWalletSupportsPermitResult = {\n permit1: boolean;\n permit2: boolean;\n};\n\nexport function useWalletSupportsPermit(): UseWalletSupportsPermitResult {\n const { data: { isContract, isDelegatedEOA } = {} } = useIsAccountContract();\n // Multisig Smart Wallet signature can't be encoded for permitMethodArgs\n // simpler to just disable for all Smart Contract Wallets, multisig and not\n const isWalletContract = isContract ?? false;\n // When Permit2 calls DelegatedEOA.isValidSignature(hash, signature),\n // it expects a 65 bytes signature, but delta compact signatures are 64 bytes and it breaks.\n const isWalletDelegatedEOA = isDelegatedEOA ?? false;\n\n return {\n permit1: !isWalletContract,\n permit2: !isWalletContract && !isWalletDelegatedEOA,\n // @TODO enable for Permit2 Delta when support is added\n };\n}\n"],"mappings":";;;AAOA,SAAOI,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACL,EAAAC,MAAAC,MAAsDR,GAAsB,EAACS;
|
|
1
|
+
{"version":3,"file":"useWalletSupportsPermit.js","names":["useIsAccountContract","UseWalletSupportsPermitResult","permit1","permit2","useWalletSupportsPermit","$","_c","data","t0","t1","undefined","isContract","isDelegatedEOA","isWalletContract","isWalletDelegatedEOA","t2","t3","t4"],"sources":["../../../../../src/hooks/permit/hooks/common/useWalletSupportsPermit.ts"],"sourcesContent":["import { useIsAccountContract } from \"@/hooks/getCode/useIsAccountContract\";\n\ntype UseWalletSupportsPermitResult = {\n permit1: boolean;\n permit2: boolean;\n};\n\nexport function useWalletSupportsPermit(): UseWalletSupportsPermitResult {\n const { data: { isContract, isDelegatedEOA } = {} } = useIsAccountContract();\n // Multisig Smart Wallet signature can't be encoded for permitMethodArgs\n // simpler to just disable for all Smart Contract Wallets, multisig and not\n const isWalletContract = isContract ?? false;\n // When Permit2 calls DelegatedEOA.isValidSignature(hash, signature),\n // it expects a 65 bytes signature, but delta compact signatures are 64 bytes and it breaks.\n const isWalletDelegatedEOA = isDelegatedEOA ?? false;\n\n return {\n permit1: !isWalletContract,\n permit2: !isWalletContract && !isWalletDelegatedEOA,\n // @TODO enable for Permit2 Delta when support is added\n };\n}\n"],"mappings":";;;AAOA,SAAOI,IAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EACL,EAAAC,MAAAC,MAAsDR,GAAsB,EAACS;CAAA,AAAAJ,EAAA,OAAAG,IAA5BC,IAAAJ,EAAA,MAAnCI,IAAAD,MAAAE,KAAAA,IAAA,EAAmC,GAAnCF,GAAmCH,EAAA,KAAAG,GAAAH,EAAA,KAAAI;CAAnC,IAAA,EAAAE,eAAAC,sBAAAH,GAGdI,IAAyBF,KAAA,IAGzBG,IAA6BF,KAAA,IAGlBG,IAAA,CAACF,GACDG,IAAA,CAACH,KAAD,CAAsBC,GAAoBG;CAEpD,OAFoDZ,EAAA,OAAAU,KAAAV,EAAA,OAAAW,KAF9CC,IAAA;EAAAf,SACIa;EAAiBZ,SACjBa;EAEV,EAAAX,EAAA,KAAAU,GAAAV,EAAA,KAAAW,GAAAX,EAAA,KAAAY,KAAAA,IAAAZ,EAAA,IAJMY"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetPermitInfo.js","names":["SupportedChainId","Address","useQuery","UseQueryOptions","UseQueryResult","detectPermitSupportType","NotDetectedPermitSupport","PermitSupportResult","useConfig","constructAddressLinkForChain","assert","useLogger","GetPermitInfoQueryKey","PermitInfo","tokenAddress","chainId","NotDetectedPermitInfo","PermitInfoResult","UseGetPermitInfoParameters","query","Omit","Error","SelectData","UseGetPermitInfoReturnType","useGetPermitInfo","t0","$","_c","logger","config","queryEnabled","enabled","t1","toLowerCase","t2","t3","t4","permitSupport","result","log","address","t5","t6","queryKey","queryFn","staleTime","Infinity","gcTime","queryResult"],"sources":["../../../../../src/hooks/permit/hooks/permit1/useGetPermitInfo.ts"],"sourcesContent":["import type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport type { Address } from \"viem\";\nimport {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport {\n detectPermitSupportType,\n type NotDetectedPermitSupport,\n type PermitSupportResult,\n} from \"../../utils/detect\";\nimport { useConfig } from \"wagmi\";\nimport { constructAddressLinkForChain } from \"@/lib/utils/explorer\";\nimport { assert } from \"ts-essentials\";\nimport { useLogger } from \"@/core/logger\";\n\ntype GetPermitInfoQueryKey = readonly [\n \"permitInfo\",\n Address?,\n SupportedChainId?,\n];\n\ntype PermitInfo = PermitSupportResult & {\n tokenAddress: Address;\n chainId: SupportedChainId;\n};\n\ntype NotDetectedPermitInfo = NotDetectedPermitSupport & {\n tokenAddress: Address;\n chainId: SupportedChainId;\n};\n\ntype PermitInfoResult = PermitInfo | NotDetectedPermitInfo;\n\nexport type UseGetPermitInfoParameters<SelectData = PermitInfoResult> = {\n tokenAddress?: Address;\n chainId?: SupportedChainId;\n query?: Omit<\n UseQueryOptions<PermitInfoResult, Error, SelectData, GetPermitInfoQueryKey>,\n \"queryKey\" | \"queryFn\"\n >;\n};\n\nexport type UseGetPermitInfoReturnType<SelectData = PermitInfoResult> =\n UseQueryResult<SelectData, Error>;\n\nexport function useGetPermitInfo<SelectData = PermitInfoResult>({\n tokenAddress,\n chainId,\n query,\n}: UseGetPermitInfoParameters<SelectData>): UseGetPermitInfoReturnType<SelectData> {\n const logger = useLogger(\"PERMIT1::GetPermitInfo\");\n const config = useConfig();\n\n const queryEnabled = query?.enabled ?? true;\n\n const queryResult = useQuery<\n PermitInfoResult,\n Error,\n SelectData,\n GetPermitInfoQueryKey\n >({\n queryKey: [\"permitInfo\", tokenAddress?.toLowerCase() as Address, chainId],\n queryFn: async () => {\n assert(tokenAddress, \"tokenAddress is required\");\n assert(chainId, \"chainId is required\");\n\n const permitSupport = await detectPermitSupportType({\n config,\n tokenAddress,\n chainId,\n });\n\n const result = {\n ...permitSupport,\n tokenAddress,\n chainId,\n };\n\n logger.log(\"result\", result);\n logger.log(\n \"check Token in explorer\",\n constructAddressLinkForChain({\n chainId,\n address: tokenAddress,\n }) + \"#writeContract\"\n );\n\n return result;\n },\n // Token Permit support won't change during App runtime\n staleTime: Infinity,\n gcTime: Infinity,\n ...query,\n enabled: queryEnabled && !!tokenAddress && !!chainId,\n });\n\n return queryResult;\n}\n"],"mappings":";;;;;;;;AA+CA,SAAOwB,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAyD,EAAAb,iBAAAC,YAAAI,aAAAM,GAK9DG,IAAejB,EAAU,yBAAyB,EAClDkB,IAAerB,GAAW,EAE1BsB,IAAqBX,GAAKY,WAAL,IAAuBC;
|
|
1
|
+
{"version":3,"file":"useGetPermitInfo.js","names":["SupportedChainId","Address","useQuery","UseQueryOptions","UseQueryResult","detectPermitSupportType","NotDetectedPermitSupport","PermitSupportResult","useConfig","constructAddressLinkForChain","assert","useLogger","GetPermitInfoQueryKey","PermitInfo","tokenAddress","chainId","NotDetectedPermitInfo","PermitInfoResult","UseGetPermitInfoParameters","query","Omit","Error","SelectData","UseGetPermitInfoReturnType","useGetPermitInfo","t0","$","_c","logger","config","queryEnabled","enabled","t1","toLowerCase","t2","t3","t4","permitSupport","result","log","address","t5","t6","queryKey","queryFn","staleTime","Infinity","gcTime","queryResult"],"sources":["../../../../../src/hooks/permit/hooks/permit1/useGetPermitInfo.ts"],"sourcesContent":["import type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport type { Address } from \"viem\";\nimport {\n useQuery,\n type UseQueryOptions,\n type UseQueryResult,\n} from \"@tanstack/react-query\";\nimport {\n detectPermitSupportType,\n type NotDetectedPermitSupport,\n type PermitSupportResult,\n} from \"../../utils/detect\";\nimport { useConfig } from \"wagmi\";\nimport { constructAddressLinkForChain } from \"@/lib/utils/explorer\";\nimport { assert } from \"ts-essentials\";\nimport { useLogger } from \"@/core/logger\";\n\ntype GetPermitInfoQueryKey = readonly [\n \"permitInfo\",\n Address?,\n SupportedChainId?,\n];\n\ntype PermitInfo = PermitSupportResult & {\n tokenAddress: Address;\n chainId: SupportedChainId;\n};\n\ntype NotDetectedPermitInfo = NotDetectedPermitSupport & {\n tokenAddress: Address;\n chainId: SupportedChainId;\n};\n\ntype PermitInfoResult = PermitInfo | NotDetectedPermitInfo;\n\nexport type UseGetPermitInfoParameters<SelectData = PermitInfoResult> = {\n tokenAddress?: Address;\n chainId?: SupportedChainId;\n query?: Omit<\n UseQueryOptions<PermitInfoResult, Error, SelectData, GetPermitInfoQueryKey>,\n \"queryKey\" | \"queryFn\"\n >;\n};\n\nexport type UseGetPermitInfoReturnType<SelectData = PermitInfoResult> =\n UseQueryResult<SelectData, Error>;\n\nexport function useGetPermitInfo<SelectData = PermitInfoResult>({\n tokenAddress,\n chainId,\n query,\n}: UseGetPermitInfoParameters<SelectData>): UseGetPermitInfoReturnType<SelectData> {\n const logger = useLogger(\"PERMIT1::GetPermitInfo\");\n const config = useConfig();\n\n const queryEnabled = query?.enabled ?? true;\n\n const queryResult = useQuery<\n PermitInfoResult,\n Error,\n SelectData,\n GetPermitInfoQueryKey\n >({\n queryKey: [\"permitInfo\", tokenAddress?.toLowerCase() as Address, chainId],\n queryFn: async () => {\n assert(tokenAddress, \"tokenAddress is required\");\n assert(chainId, \"chainId is required\");\n\n const permitSupport = await detectPermitSupportType({\n config,\n tokenAddress,\n chainId,\n });\n\n const result = {\n ...permitSupport,\n tokenAddress,\n chainId,\n };\n\n logger.log(\"result\", result);\n logger.log(\n \"check Token in explorer\",\n constructAddressLinkForChain({\n chainId,\n address: tokenAddress,\n }) + \"#writeContract\"\n );\n\n return result;\n },\n // Token Permit support won't change during App runtime\n staleTime: Infinity,\n gcTime: Infinity,\n ...query,\n enabled: queryEnabled && !!tokenAddress && !!chainId,\n });\n\n return queryResult;\n}\n"],"mappings":";;;;;;;;AA+CA,SAAOwB,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAyD,EAAAb,iBAAAC,YAAAI,aAAAM,GAK9DG,IAAejB,EAAU,yBAAyB,EAClDkB,IAAerB,GAAW,EAE1BsB,IAAqBX,GAAKY,WAAL,IAAuBC;CAAA,AAAAN,EAAA,OAAAZ,IAQUkB,IAAAN,EAAA,MAA3BM,IAAAlB,GAAYmB,aAAe,EAAAP,EAAA,KAAAZ,GAAAY,EAAA,KAAAM;CAA3B,IAAAE,IAAAF,GAAsCG;CAAA,AAAAT,EAAA,OAAAX,KAAAW,EAAA,OAAAQ,KAArDC,IAAA;EAAC;EAAcD;EAAwCnB;EAAQ,EAAAW,EAAA,KAAAX,GAAAW,EAAA,KAAAQ,GAAAR,EAAA,KAAAS,KAAAA,IAAAT,EAAA;CAAA,IAAAU;CAAA,AAAAV,EAAA,OAAAX,KAAAW,EAAA,OAAAG,KAAAH,EAAA,OAAAE,KAAAF,EAAA,OAAAZ,KAChEsB,IAAA,YAAA;EAEP1B,AADAA,EAAOI,GAAc,2BAA2B,EAChDJ,EAAOK,GAAS,sBAAsB;EAQtC,IAAAuB,IAAe;GAAA,GACVD,MAPuBhC,EAAwB;IAAAwB;IAAAf;IAAAC;IAInD,CAAC;GAGgBD;GAAAC;GAGjB;EASA,OAPDa,EAAMW,IAAK,UAAUD,EAAO,EAC5BV,EAAMW,IACJ,2BACA9B,EAA6B;GAAAM;GAAAyB,SAElB1B;GACV,CAAC,GAAG,iBACN,EAEMwB;IACRZ,EAAA,KAAAX,GAAAW,EAAA,KAAAG,GAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAZ,GAAAY,EAAA,KAAAU,KAAAA,IAAAV,EAAA;CAKQ,IAAAe,IAAAX,KAAA,CAAiB,CAAChB,KAAlB,CAAmC,CAACC,GAAO2B;CACnD,OADmDhB,EAAA,QAAAP,KAAAO,EAAA,QAAAS,KAAAT,EAAA,QAAAU,KAAAV,EAAA,QAAAe,KAjCpDC,IAAA;EAAAC,UACUR;EAA+DS,SAChER;EA0BRS,WAEUC;EAAQC,QACXD;EAAQ,GACb3B;EAAKY,SACCU;EACV,EAAAf,EAAA,MAAAP,GAAAO,EAAA,MAAAS,GAAAT,EAAA,MAAAU,GAAAV,EAAA,MAAAe,GAAAf,EAAA,MAAAgB,KAAAA,IAAAhB,EAAA,KAvCmBxB,EAKlBwC,EAoCKM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGetSafePermitInfo.js","names":["Address","useGetPermitInfo","useTryToSignPermit1","SupportedChainId","TrySignPermitFailure","TrySignPermitSuccess","PermitSupportResult","Prettify","UseGetSafePermitInfoParameters","tokenAddress","chainId","enabled","UseGetSafePermitInfoSuccess","testPermitResult","safePermitInfo","UseGetSafePermitInfoFailure","UseGetSafePermitInfoResult","isLoading","isError","error","Error","isSuccess","useGetSafePermitInfo","t0","$","_c","t1","undefined","t2","t3","query","permitInfoQuery","t4","data","type","t5","t6","t7","t8","permitInfo","trySignPermitQuery","success","t9"],"sources":["../../../../../src/hooks/permit/hooks/permit1/useGetSafePermitInfo.ts"],"sourcesContent":["import type { Address } from \"viem\";\nimport { useGetPermitInfo } from \"./useGetPermitInfo\";\nimport { useTryToSignPermit1 } from \"./useTryToSignPermit1\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport type {\n TrySignPermitFailure,\n TrySignPermitSuccess,\n} from \"../../utils/trySignPermit1\";\nimport type { PermitSupportResult } from \"../../utils/detect\";\nimport type { Prettify } from \"ts-essentials\";\n\ntype UseGetSafePermitInfoParameters = {\n tokenAddress?: Address;\n chainId?: SupportedChainId;\n enabled?: boolean;\n};\n\ntype UseGetSafePermitInfoSuccess = {\n testPermitResult?: TrySignPermitSuccess;\n safePermitInfo?: PermitSupportResult;\n};\n\ntype UseGetSafePermitInfoFailure = {\n testPermitResult?: TrySignPermitFailure;\n safePermitInfo?: undefined;\n};\n\nexport type UseGetSafePermitInfoResult = Prettify<\n (UseGetSafePermitInfoSuccess | UseGetSafePermitInfoFailure) & {\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n isSuccess: boolean;\n }\n>;\n\n/**\n * Prefer this hook for getting permitInfo\n * as it employs more checks\n */\nexport function useGetSafePermitInfo({\n tokenAddress,\n chainId,\n enabled = true, // enabled: false to get cached results\n}: UseGetSafePermitInfoParameters): UseGetSafePermitInfoResult {\n const permitInfoQuery = useGetPermitInfo({\n tokenAddress,\n chainId,\n query: {\n enabled,\n },\n });\n\n const trySignPermitQuery = useTryToSignPermit1({\n permitInfo:\n permitInfoQuery.data?.type !== \"NOT_DETECTED\"\n ? permitInfoQuery.data\n : undefined,\n tokenAddress: permitInfoQuery.data?.tokenAddress,\n chainId: permitInfoQuery.data?.chainId,\n query: {\n enabled,\n },\n });\n\n const testPermitResult = trySignPermitQuery.data;\n\n const safePermitInfo = testPermitResult?.success\n ? testPermitResult.permitInfo\n : undefined;\n const isLoading = permitInfoQuery.isLoading || trySignPermitQuery.isLoading;\n const isError = permitInfoQuery.isError || trySignPermitQuery.isError;\n const error = permitInfoQuery.error || trySignPermitQuery.error;\n const isSuccess = permitInfoQuery.isSuccess || trySignPermitQuery.isSuccess;\n\n if (testPermitResult?.success) {\n return {\n testPermitResult,\n safePermitInfo, // when present, Token can use some kind of Permit1\n isLoading,\n isError,\n error,\n isSuccess,\n };\n }\n\n return {\n testPermitResult,\n isLoading,\n isError,\n error,\n isSuccess,\n };\n}\n"],"mappings":";;;;AAwCA,SAAOsB,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAA8B,EAAAhB,iBAAAC,YAAAC,SAAAe,MAAAH,GAGnCZ,IAAAe,MAAAC,KAAAA,IAAA,KAAAD,GAAcE;
|
|
1
|
+
{"version":3,"file":"useGetSafePermitInfo.js","names":["Address","useGetPermitInfo","useTryToSignPermit1","SupportedChainId","TrySignPermitFailure","TrySignPermitSuccess","PermitSupportResult","Prettify","UseGetSafePermitInfoParameters","tokenAddress","chainId","enabled","UseGetSafePermitInfoSuccess","testPermitResult","safePermitInfo","UseGetSafePermitInfoFailure","UseGetSafePermitInfoResult","isLoading","isError","error","Error","isSuccess","useGetSafePermitInfo","t0","$","_c","t1","undefined","t2","t3","query","permitInfoQuery","t4","data","type","t5","t6","t7","t8","permitInfo","trySignPermitQuery","success","t9"],"sources":["../../../../../src/hooks/permit/hooks/permit1/useGetSafePermitInfo.ts"],"sourcesContent":["import type { Address } from \"viem\";\nimport { useGetPermitInfo } from \"./useGetPermitInfo\";\nimport { useTryToSignPermit1 } from \"./useTryToSignPermit1\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport type {\n TrySignPermitFailure,\n TrySignPermitSuccess,\n} from \"../../utils/trySignPermit1\";\nimport type { PermitSupportResult } from \"../../utils/detect\";\nimport type { Prettify } from \"ts-essentials\";\n\ntype UseGetSafePermitInfoParameters = {\n tokenAddress?: Address;\n chainId?: SupportedChainId;\n enabled?: boolean;\n};\n\ntype UseGetSafePermitInfoSuccess = {\n testPermitResult?: TrySignPermitSuccess;\n safePermitInfo?: PermitSupportResult;\n};\n\ntype UseGetSafePermitInfoFailure = {\n testPermitResult?: TrySignPermitFailure;\n safePermitInfo?: undefined;\n};\n\nexport type UseGetSafePermitInfoResult = Prettify<\n (UseGetSafePermitInfoSuccess | UseGetSafePermitInfoFailure) & {\n isLoading: boolean;\n isError: boolean;\n error: Error | null;\n isSuccess: boolean;\n }\n>;\n\n/**\n * Prefer this hook for getting permitInfo\n * as it employs more checks\n */\nexport function useGetSafePermitInfo({\n tokenAddress,\n chainId,\n enabled = true, // enabled: false to get cached results\n}: UseGetSafePermitInfoParameters): UseGetSafePermitInfoResult {\n const permitInfoQuery = useGetPermitInfo({\n tokenAddress,\n chainId,\n query: {\n enabled,\n },\n });\n\n const trySignPermitQuery = useTryToSignPermit1({\n permitInfo:\n permitInfoQuery.data?.type !== \"NOT_DETECTED\"\n ? permitInfoQuery.data\n : undefined,\n tokenAddress: permitInfoQuery.data?.tokenAddress,\n chainId: permitInfoQuery.data?.chainId,\n query: {\n enabled,\n },\n });\n\n const testPermitResult = trySignPermitQuery.data;\n\n const safePermitInfo = testPermitResult?.success\n ? testPermitResult.permitInfo\n : undefined;\n const isLoading = permitInfoQuery.isLoading || trySignPermitQuery.isLoading;\n const isError = permitInfoQuery.isError || trySignPermitQuery.isError;\n const error = permitInfoQuery.error || trySignPermitQuery.error;\n const isSuccess = permitInfoQuery.isSuccess || trySignPermitQuery.isSuccess;\n\n if (testPermitResult?.success) {\n return {\n testPermitResult,\n safePermitInfo, // when present, Token can use some kind of Permit1\n isLoading,\n isError,\n error,\n isSuccess,\n };\n }\n\n return {\n testPermitResult,\n isLoading,\n isError,\n error,\n isSuccess,\n };\n}\n"],"mappings":";;;;AAwCA,SAAOsB,EAAAC,GAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAA8B,EAAAhB,iBAAAC,YAAAC,SAAAe,MAAAH,GAGnCZ,IAAAe,MAAAC,KAAAA,IAAA,KAAAD,GAAcE;CAAA,AAAAJ,EAAA,OAAAb,IAOXiB,IAAAJ,EAAA,MAFMI,IAAA,EAAAjB,YAEN,EAAAa,EAAA,KAAAb,GAAAa,EAAA,KAAAI;CAAA,IAAAC;CAAA,AAAAL,EAAA,OAAAd,KAAAc,EAAA,OAAAI,KAAAJ,EAAA,OAAAf,KALsCoB,IAAA;EAAApB;EAAAC;EAAAoB,OAGhCF;EAGR,EAAAJ,EAAA,KAAAd,GAAAc,EAAA,KAAAI,GAAAJ,EAAA,KAAAf,GAAAe,EAAA,KAAAK,KAAAA,IAAAL,EAAA;CAND,IAAAO,IAAwB9B,EAAiB4B,EAMvC,EAIEG,IAAAD,EAAeE,MAAWC,SAAK,iBAA/BP,KAAAA,IACII,EAAeE,MAEPE,IAAAJ,EAAeE,MAAmBxB,cACvC2B,IAAAL,EAAeE,MAAcvB,SAAA2B;CAAA,AAAAb,EAAA,OAAAb,IAGrC0B,IAAAb,EAAA,MAFMa,IAAA,EAAA1B,YAEN,EAAAa,EAAA,KAAAb,GAAAa,EAAA,KAAAa;CAAA,IAAAC;CAAA,AAAAd,EAAA,OAAAQ,KAAAR,EAAA,OAAAW,KAAAX,EAAA,QAAAY,KAAAZ,EAAA,QAAAa,KAT4CC,IAAA;EAAAC,YAE3CP;EAEavB,cACD0B;EAAkCzB,SACvC0B;EAA6BN,OAC/BO;EAGR,EAAAb,EAAA,KAAAQ,GAAAR,EAAA,KAAAW,GAAAX,EAAA,MAAAY,GAAAZ,EAAA,MAAAa,GAAAb,EAAA,MAAAc,KAAAA,IAAAd,EAAA;CAVD,IAAAgB,IAA2BtC,EAAoBoC,EAU7C,EAEFzB,IAAyB2B,EAAkBP,MAE3CnB,IAAuBD,GAAgB4B,UACnC5B,EAAgB0B,aADGZ,KAAAA,GAGvBV,IAAkBc,EAAed,aAAcuB,EAAkBvB,WACjEC,IAAgBa,EAAeb,WAAYsB,EAAkBtB,SAC7DC,IAAcY,EAAeZ,SAAUqB,EAAkBrB,OACzDE,IAAkBU,EAAeV,aAAcmB,EAAkBnB;CAEjE,IAAIR,GAAgB4B,SAAS;EAAA,IAAAC;EAQ1B,OAR0BlB,EAAA,QAAAL,KAAAK,EAAA,QAAAN,KAAAM,EAAA,QAAAP,KAAAO,EAAA,QAAAH,KAAAG,EAAA,QAAAV,KAAAU,EAAA,QAAAX,KACpB6B,IAAA;GAAA7B;GAAAC;GAAAG;GAAAC;GAAAC;GAAAE;GAON,EAAAG,EAAA,MAAAL,GAAAK,EAAA,MAAAN,GAAAM,EAAA,MAAAP,GAAAO,EAAA,MAAAH,GAAAG,EAAA,MAAAV,GAAAU,EAAA,MAAAX,GAAAW,EAAA,MAAAkB,KAAAA,IAAAlB,EAAA,KAPMkB;;CAQR,IAAAA;CAQA,OARAlB,EAAA,QAAAL,KAAAK,EAAA,QAAAN,KAAAM,EAAA,QAAAP,KAAAO,EAAA,QAAAH,KAAAG,EAAA,QAAAX,KAEM6B,IAAA;EAAA7B;EAAAI;EAAAC;EAAAC;EAAAE;EAMN,EAAAG,EAAA,MAAAL,GAAAK,EAAA,MAAAN,GAAAM,EAAA,MAAAP,GAAAO,EAAA,MAAAH,GAAAG,EAAA,MAAAX,GAAAW,EAAA,MAAAkB,KAAAA,IAAAlB,EAAA,KANMkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePermit1Nonce.js","names":["useReadContracts","ERC_20_NONCES_ABI","SupportedChainId","atom","useAtomValue","useSetAtom","Token","QueryObserverResult","RefetchOptions","Address","useMemo","ReadContractsData","isETHaddress","UsePermitNonceParams","token","owner","chainId","enabled","NoncesAtom","Record","TokenNonceKey","SetNonceInput","Pick","usedNonce","UseMarkNonceAsUsedResult","markNonceAsUsed","input","clearNonce","useMarkNonceAsUsed","setNonces","prev","key","getNonceKey","address","network","prevNonce","undefined","_","withoutKey","GetNonceInput","toLowerCase","const","NonceMethod","PermitNonceResult","nonceMethod","nonceToUse","UsePermit1NonceResult","isLoading","isError","isSuccess","error","Error","refetch","options","Promise","usePermit1Nonce","noncesMap","tokenNotETH","contractCalls","select","data","successIndex","findIndex","d","status","method","functionName","result","lastUnusedNonce","nonce","ZERO_ADDRESS","tokenAddress","ownerAddress","abi","args","nonceResult","allowFailure","contracts","query"],"sources":["../../../../../src/hooks/permit/hooks/permit1/usePermit1Nonce.ts"],"sourcesContent":["import { useReadContracts } from \"wagmi\";\nimport { ERC_20_NONCES_ABI } from \"../../utils/constants\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { atom } from \"jotai\";\nimport { useAtomValue, useSetAtom } from \"@/core/store\";\nimport type { Token } from \"@/tokens/state/types\";\nimport type {\n QueryObserverResult,\n RefetchOptions,\n} from \"@tanstack/react-query\";\nimport type { Address } from \"viem\";\nimport { useMemo } from \"react\";\nimport type { ReadContractsData } from \"wagmi/query\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\n\ninterface UsePermitNonceParams {\n token?: Address;\n owner?: Address;\n chainId?: SupportedChainId;\n enabled?: boolean;\n}\n\n// chainId:token:owner => unused nonce (next to be used, starting with 0)\nconst NoncesAtom = atom<Record<TokenNonceKey, bigint>>({});\n\ntype SetNonceInput = {\n token: Pick<Token, \"address\" | \"network\">;\n owner: Address;\n usedNonce?: bigint;\n};\n\ntype UseMarkNonceAsUsedResult = {\n // mark as minimum nonce to use for next Permit, after sending Order or tx out\n markNonceAsUsed: (input: SetNonceInput) => void;\n // clear saved minimum nonce to rely on fetched nonce, if Order or tx failed\n clearNonce: (input: Pick<SetNonceInput, \"token\" | \"owner\">) => void;\n};\n\nexport function useMarkNonceAsUsed(): UseMarkNonceAsUsedResult {\n const setNonces = useSetAtom(NoncesAtom);\n\n const markNonceAsUsed: UseMarkNonceAsUsedResult[\"markNonceAsUsed\"] = ({\n token,\n owner,\n usedNonce,\n }) => {\n setNonces((prev) => {\n const key = getNonceKey({\n token: token.address as Address,\n owner,\n chainId: token.network,\n });\n const prevNonce = usedNonce ?? prev[key] ?? 0n;\n return {\n ...prev,\n [key]: prevNonce + 1n,\n };\n });\n };\n\n const clearNonce: UseMarkNonceAsUsedResult[\"clearNonce\"] = ({\n token,\n owner,\n }) => {\n setNonces((prev) => {\n const key = getNonceKey({\n token: token.address as Address,\n owner,\n chainId: token.network,\n });\n\n if (prev[key] === undefined) return prev;\n\n const { [key]: _, ...withoutKey } = prev;\n return withoutKey;\n });\n };\n\n return {\n markNonceAsUsed,\n clearNonce,\n };\n}\n\ntype GetNonceInput = {\n token: Address;\n owner: Address;\n chainId: SupportedChainId;\n};\n\ntype TokenNonceKey = `${number}:${Address}:${Address}`;\n\nfunction getNonceKey({ token, owner, chainId }: GetNonceInput): TokenNonceKey {\n return `${chainId}:${token.toLowerCase() as Address}:${owner.toLowerCase() as Address}` as const;\n}\n\nexport type NonceMethod = (typeof ERC_20_NONCES_ABI)[number][\"name\"];\n\ntype PermitNonceResult = {\n nonceMethod: NonceMethod;\n nonceToUse: bigint;\n};\n\nexport type UsePermit1NonceResult = {\n // null when no nonce support detected\n nonceToUse?: PermitNonceResult[\"nonceToUse\"] | null;\n nonceMethod?: PermitNonceResult[\"nonceMethod\"] | null;\n isLoading: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n refetch: (\n options?: RefetchOptions\n ) => Promise<QueryObserverResult<PermitNonceResult | null, Error>>;\n};\n\nexport function usePermit1Nonce({\n token,\n owner,\n chainId,\n enabled = true,\n}: UsePermitNonceParams): UsePermit1NonceResult {\n const key =\n token && owner && chainId ? getNonceKey({ token, owner, chainId }) : null;\n\n const noncesMap = useAtomValue(NoncesAtom);\n const tokenNotETH = token && !isETHaddress(token);\n\n // explicitly memoize select\n const { contractCalls, select } = useMemo(() => {\n const select = (\n data: ReadContractsData<typeof contractCalls, true>\n ): PermitNonceResult | null => {\n const successIndex = data.findIndex((d) => d.status === \"success\");\n // no method successfully returned anything\n if (successIndex === -1) return null;\n const method = contractCalls[successIndex]?.functionName;\n const result = data[successIndex]?.result;\n\n // the vars will always be non-null at this point\n if (!method || result === undefined) return null;\n\n const lastUnusedNonce = key ? (noncesMap[key] ?? 0n) : 0n;\n const nonce = result > lastUnusedNonce ? result : lastUnusedNonce;\n\n return {\n nonceMethod: method,\n nonceToUse: nonce,\n };\n };\n\n const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n // for the case where the token or owner is not set, to match the types,\n // readContracts isn't run anyway because of enabled=false\n const tokenAddress = (token?.toLowerCase() as Address) ?? ZERO_ADDRESS;\n const ownerAddress = (owner?.toLowerCase() as Address) ?? ZERO_ADDRESS;\n\n const contractCalls = [\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonces\",\n args: [ownerAddress],\n },\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"_nonces\",\n args: [ownerAddress],\n },\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonce\",\n args: [ownerAddress],\n },\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"getNonce\",\n args: [ownerAddress],\n },\n ] as const;\n\n return {\n contractCalls,\n select,\n };\n }, [noncesMap, key, owner, token]);\n\n const {\n data: nonceResult,\n isLoading,\n isError,\n isSuccess,\n error,\n refetch,\n } = useReadContracts({\n allowFailure: true,\n contracts: contractCalls,\n query: {\n enabled: enabled && tokenNotETH && !!(token && owner && chainId),\n select,\n },\n });\n\n return {\n nonceToUse: nonceResult === null ? null : nonceResult?.nonceToUse,\n nonceMethod: nonceResult === null ? null : nonceResult?.nonceMethod,\n isLoading,\n isError,\n isSuccess,\n error,\n refetch,\n };\n}\n"],"mappings":";;;;;;;AAuBA,IAAMkB,IAAaf,EAAoC,EAAE,CAAC;AAe1D,SAAgByB,IAA+C;CAC7D,IAAMC,IAAYxB,EAAWa,EAAW;
|
|
1
|
+
{"version":3,"file":"usePermit1Nonce.js","names":["useReadContracts","ERC_20_NONCES_ABI","SupportedChainId","atom","useAtomValue","useSetAtom","Token","QueryObserverResult","RefetchOptions","Address","useMemo","ReadContractsData","isETHaddress","UsePermitNonceParams","token","owner","chainId","enabled","NoncesAtom","Record","TokenNonceKey","SetNonceInput","Pick","usedNonce","UseMarkNonceAsUsedResult","markNonceAsUsed","input","clearNonce","useMarkNonceAsUsed","setNonces","prev","key","getNonceKey","address","network","prevNonce","undefined","_","withoutKey","GetNonceInput","toLowerCase","const","NonceMethod","PermitNonceResult","nonceMethod","nonceToUse","UsePermit1NonceResult","isLoading","isError","isSuccess","error","Error","refetch","options","Promise","usePermit1Nonce","noncesMap","tokenNotETH","contractCalls","select","data","successIndex","findIndex","d","status","method","functionName","result","lastUnusedNonce","nonce","ZERO_ADDRESS","tokenAddress","ownerAddress","abi","args","nonceResult","allowFailure","contracts","query"],"sources":["../../../../../src/hooks/permit/hooks/permit1/usePermit1Nonce.ts"],"sourcesContent":["import { useReadContracts } from \"wagmi\";\nimport { ERC_20_NONCES_ABI } from \"../../utils/constants\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { atom } from \"jotai\";\nimport { useAtomValue, useSetAtom } from \"@/core/store\";\nimport type { Token } from \"@/tokens/state/types\";\nimport type {\n QueryObserverResult,\n RefetchOptions,\n} from \"@tanstack/react-query\";\nimport type { Address } from \"viem\";\nimport { useMemo } from \"react\";\nimport type { ReadContractsData } from \"wagmi/query\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\n\ninterface UsePermitNonceParams {\n token?: Address;\n owner?: Address;\n chainId?: SupportedChainId;\n enabled?: boolean;\n}\n\n// chainId:token:owner => unused nonce (next to be used, starting with 0)\nconst NoncesAtom = atom<Record<TokenNonceKey, bigint>>({});\n\ntype SetNonceInput = {\n token: Pick<Token, \"address\" | \"network\">;\n owner: Address;\n usedNonce?: bigint;\n};\n\ntype UseMarkNonceAsUsedResult = {\n // mark as minimum nonce to use for next Permit, after sending Order or tx out\n markNonceAsUsed: (input: SetNonceInput) => void;\n // clear saved minimum nonce to rely on fetched nonce, if Order or tx failed\n clearNonce: (input: Pick<SetNonceInput, \"token\" | \"owner\">) => void;\n};\n\nexport function useMarkNonceAsUsed(): UseMarkNonceAsUsedResult {\n const setNonces = useSetAtom(NoncesAtom);\n\n const markNonceAsUsed: UseMarkNonceAsUsedResult[\"markNonceAsUsed\"] = ({\n token,\n owner,\n usedNonce,\n }) => {\n setNonces((prev) => {\n const key = getNonceKey({\n token: token.address as Address,\n owner,\n chainId: token.network,\n });\n const prevNonce = usedNonce ?? prev[key] ?? 0n;\n return {\n ...prev,\n [key]: prevNonce + 1n,\n };\n });\n };\n\n const clearNonce: UseMarkNonceAsUsedResult[\"clearNonce\"] = ({\n token,\n owner,\n }) => {\n setNonces((prev) => {\n const key = getNonceKey({\n token: token.address as Address,\n owner,\n chainId: token.network,\n });\n\n if (prev[key] === undefined) return prev;\n\n const { [key]: _, ...withoutKey } = prev;\n return withoutKey;\n });\n };\n\n return {\n markNonceAsUsed,\n clearNonce,\n };\n}\n\ntype GetNonceInput = {\n token: Address;\n owner: Address;\n chainId: SupportedChainId;\n};\n\ntype TokenNonceKey = `${number}:${Address}:${Address}`;\n\nfunction getNonceKey({ token, owner, chainId }: GetNonceInput): TokenNonceKey {\n return `${chainId}:${token.toLowerCase() as Address}:${owner.toLowerCase() as Address}` as const;\n}\n\nexport type NonceMethod = (typeof ERC_20_NONCES_ABI)[number][\"name\"];\n\ntype PermitNonceResult = {\n nonceMethod: NonceMethod;\n nonceToUse: bigint;\n};\n\nexport type UsePermit1NonceResult = {\n // null when no nonce support detected\n nonceToUse?: PermitNonceResult[\"nonceToUse\"] | null;\n nonceMethod?: PermitNonceResult[\"nonceMethod\"] | null;\n isLoading: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n refetch: (\n options?: RefetchOptions\n ) => Promise<QueryObserverResult<PermitNonceResult | null, Error>>;\n};\n\nexport function usePermit1Nonce({\n token,\n owner,\n chainId,\n enabled = true,\n}: UsePermitNonceParams): UsePermit1NonceResult {\n const key =\n token && owner && chainId ? getNonceKey({ token, owner, chainId }) : null;\n\n const noncesMap = useAtomValue(NoncesAtom);\n const tokenNotETH = token && !isETHaddress(token);\n\n // explicitly memoize select\n const { contractCalls, select } = useMemo(() => {\n const select = (\n data: ReadContractsData<typeof contractCalls, true>\n ): PermitNonceResult | null => {\n const successIndex = data.findIndex((d) => d.status === \"success\");\n // no method successfully returned anything\n if (successIndex === -1) return null;\n const method = contractCalls[successIndex]?.functionName;\n const result = data[successIndex]?.result;\n\n // the vars will always be non-null at this point\n if (!method || result === undefined) return null;\n\n const lastUnusedNonce = key ? (noncesMap[key] ?? 0n) : 0n;\n const nonce = result > lastUnusedNonce ? result : lastUnusedNonce;\n\n return {\n nonceMethod: method,\n nonceToUse: nonce,\n };\n };\n\n const ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n // for the case where the token or owner is not set, to match the types,\n // readContracts isn't run anyway because of enabled=false\n const tokenAddress = (token?.toLowerCase() as Address) ?? ZERO_ADDRESS;\n const ownerAddress = (owner?.toLowerCase() as Address) ?? ZERO_ADDRESS;\n\n const contractCalls = [\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonces\",\n args: [ownerAddress],\n },\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"_nonces\",\n args: [ownerAddress],\n },\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"nonce\",\n args: [ownerAddress],\n },\n {\n address: tokenAddress,\n abi: ERC_20_NONCES_ABI,\n functionName: \"getNonce\",\n args: [ownerAddress],\n },\n ] as const;\n\n return {\n contractCalls,\n select,\n };\n }, [noncesMap, key, owner, token]);\n\n const {\n data: nonceResult,\n isLoading,\n isError,\n isSuccess,\n error,\n refetch,\n } = useReadContracts({\n allowFailure: true,\n contracts: contractCalls,\n query: {\n enabled: enabled && tokenNotETH && !!(token && owner && chainId),\n select,\n },\n });\n\n return {\n nonceToUse: nonceResult === null ? null : nonceResult?.nonceToUse,\n nonceMethod: nonceResult === null ? null : nonceResult?.nonceMethod,\n isLoading,\n isError,\n isSuccess,\n error,\n refetch,\n };\n}\n"],"mappings":";;;;;;;AAuBA,IAAMkB,IAAaf,EAAoC,EAAE,CAAC;AAe1D,SAAgByB,IAA+C;CAC7D,IAAMC,IAAYxB,EAAWa,EAAW;CAuCxC,OAAO;EACLO,kBAtCoE,EACpEX,UACAC,UACAQ,mBACI;GACJM,GAAWC,MAAS;IAClB,IAAMC,IAAMC,EAAY;KACtBlB,OAAOA,EAAMmB;KACblB;KACAC,SAASF,EAAMoB;KAChB,CAAC,EACIC,IAAYZ,KAAaO,EAAKC,MAAQ;IAC5C,OAAO;KACL,GAAGD;MACFC,IAAMI,IAAY;KACpB;KACD;;EAuBFR,aApB0D,EAC1Db,OAAAA,GACAC,OAAAA,QACI;GACJc,GAAWC,MAAS;IAClB,IAAMC,IAAMC,EAAY;KACtBlB,OAAOA,EAAMmB;KACblB,OAAAA;KACAC,SAASF,EAAMoB;KAChB,CAAC;IAEF,IAAIJ,EAAKC,OAASK,KAAAA,GAAW,OAAON;IAEpC,IAAM,GAAGC,IAAMM,GAAG,GAAGC,MAAeR;IACpC,OAAOQ;KACP;;EAMH;;AAWH,SAASN,EAAY,EAAElB,UAAOC,UAAOC,cAAyC;CAC5E,OAAO,GAAGA,EAAO,GAAIF,EAAM0B,aAAa,CAAW,GAAIzB,EAAMyB,aAAa;;AAuB5E,SAAgBe,EAAgB,EAC9BzC,UACAC,UACAC,YACAC,aAAU,MACoC;CAC9C,IAAMc,IACJjB,KAASC,KAASC,IAAUgB,EAAY;EAAElB;EAAOC;EAAOC;EAAS,CAAC,GAAG,MAEjEwC,IAAYpD,EAAac,EAAW,EACpCuC,IAAc3C,KAAS,CAACF,EAAaE,EAAM,EAG3C,EAAE4C,eAAAA,GAAeC,QAAAA,MAAWjD,QAAc;EAC9C,IAAMiD,KACJC,MAC6B;GAC7B,IAAMC,IAAeD,EAAKE,WAAWC,MAAMA,EAAEC,WAAW,UAAU;GAElE,IAAIH,MAAiB,IAAI,OAAO;GAChC,IAAMI,IAASP,EAAcG,IAAeK,cACtCC,IAASP,EAAKC,IAAeM;GAGnC,IAAI,CAACF,KAAUE,MAAW/B,KAAAA,GAAW,OAAO;GAE5C,IAAMgC,IAAkBrC,IAAOyB,EAAUzB,MAAQ,KAAM;GAGvD,OAAO;IACLa,aAAaqB;IACbpB,YAJYsB,IAASC,IAAkBD,IAASC;IAKjD;KAGGE,IAAe,8CAGfC,IAAgBzD,GAAO0B,aAAa,IAAgB8B,GACpDE,IAAgBzD,GAAOyB,aAAa,IAAgB8B,GAEpDZ,IAAgB;GACpB;IACEzB,SAASsC;IACTE,KAAKxE;IACLiE,cAAc;IACdQ,MAAM,CAACF,EAAY;IACpB;GACD;IACEvC,SAASsC;IACTE,KAAKxE;IACLiE,cAAc;IACdQ,MAAM,CAACF,EAAY;IACpB;GACD;IACEvC,SAASsC;IACTE,KAAKxE;IACLiE,cAAc;IACdQ,MAAM,CAACF,EAAY;IACpB;GACD;IACEvC,SAASsC;IACTE,KAAKxE;IACLiE,cAAc;IACdQ,MAAM,CAACF,EAAY;IACpB;GACF;EAED,OAAO;GACLd;GACAC;GACD;IACA;EAACH;EAAWzB;EAAKhB;EAAOD;EAAM,CAAC,EAE5B,EACJ8C,MAAMe,GACN5B,cACAC,YACAC,cACAC,UACAE,eACEpD,EAAiB;EACnB4E,cAAc;EACdC,WAAWnB;EACXoB,OAAO;GACL7D,SAASA,KAAWwC,KAAe,CAAC,EAAE3C,KAASC,KAASC;GACxD2C,QAAAA;GACF;EACD,CAAC;CAEF,OAAO;EACLd,YAAY8B,MAAgB,OAAO,OAAOA,GAAa9B;EACvDD,aAAa+B,MAAgB,OAAO,OAAOA,GAAa/B;EACxDG;EACAC;EACAC;EACAC;EACAE;EACD"}
|