@velora-dex/widget 0.8.1-dev.0 → 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.
Files changed (615) hide show
  1. package/dist/components/SearchInput/SearchInput.js.map +1 -1
  2. package/dist/components/ui/accordion.js.map +1 -1
  3. package/dist/components/ui/button.js.map +1 -1
  4. package/dist/components/ui/card.js.map +1 -1
  5. package/dist/components/ui/drawer.js.map +1 -1
  6. package/dist/components/ui/dropdown-menu.js.map +1 -1
  7. package/dist/components/ui/input.js.map +1 -1
  8. package/dist/components/ui/progress.js.map +1 -1
  9. package/dist/components/ui/skeleton.js.map +1 -1
  10. package/dist/components/ui/sonner.js.map +1 -1
  11. package/dist/components/ui/switch.js.map +1 -1
  12. package/dist/components/ui/tooltip.js.map +1 -1
  13. package/dist/components/web3/AccountButton.js.map +1 -1
  14. package/dist/components/web3/ConnectExternalProvider/AutoconnectExternal.js.map +1 -1
  15. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.d.ts +1 -0
  16. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.d.ts.map +1 -1
  17. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.js +30 -16
  18. package/dist/components/web3/ConnectExternalProvider/metamaskProviderWrapper.js.map +1 -1
  19. package/dist/components/web3/ConnectExternalProvider/safeProviderWrapper.js.map +1 -1
  20. package/dist/components/web3/ConnectExternalProvider/utils.js.map +1 -1
  21. package/dist/components/web3/ConnectWallets/WalletConnectButtons.js.map +1 -1
  22. package/dist/components/web3/ConnectWallets/index.js +1 -1
  23. package/dist/components/web3/ConnectWallets/index.js.map +1 -1
  24. package/dist/components/web3/ConnectWallets/privy/button.js.map +1 -1
  25. package/dist/components/web3/ConnectWallets/privy/connectRunner.js.map +1 -1
  26. package/dist/components/web3/ConnectWallets/privy/iframe.js.map +1 -1
  27. package/dist/components/web3/ConnectWallets/privy/provider.js.map +1 -1
  28. package/dist/components/web3/ConnectWallets/walletFlags.js.map +1 -1
  29. package/dist/components/web3/ConnectWallets/walletIcons.js +1 -1
  30. package/dist/components/web3/ConnectWallets/walletIcons.js.map +1 -1
  31. package/dist/components/web3/ConnectedWallet/ConnectedWallet.js.map +1 -1
  32. package/dist/components/web3/providers.js.map +1 -1
  33. package/dist/components/widget/AppHeader/Activities/Activities.js.map +1 -1
  34. package/dist/components/widget/AppHeader/Activities/ActivitiesScreen.js.map +1 -1
  35. package/dist/components/widget/AppHeader/Activities/ActivityItems.js.map +1 -1
  36. package/dist/components/widget/AppHeader/Activities/Drawers.js.map +1 -1
  37. package/dist/components/widget/AppHeader/Activities/hooks.js.map +1 -1
  38. package/dist/components/widget/AppHeader/Activities/utils.js.map +1 -1
  39. package/dist/components/widget/AppHeader/ActivityButton.js.map +1 -1
  40. package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
  41. package/dist/components/widget/AppHeader/TradeModeSwitcher.d.ts.map +1 -1
  42. package/dist/components/widget/AppHeader/TradeModeSwitcher.js +61 -53
  43. package/dist/components/widget/AppHeader/TradeModeSwitcher.js.map +1 -1
  44. package/dist/components/widget/AppHeader/state/showMoreAtom.js.map +1 -1
  45. package/dist/components/widget/BridgeList/BridgeListItem.js.map +1 -1
  46. package/dist/components/widget/BridgeList/BridgeProtocolsList.js.map +1 -1
  47. package/dist/components/widget/BridgeList/BridgesList.js.map +1 -1
  48. package/dist/components/widget/BridgeList/hooks.js.map +1 -1
  49. package/dist/components/widget/BridgePreferences/BridgePreferences.js.map +1 -1
  50. package/dist/components/widget/BridgeSelectorExpandable/BridgeSelectorExpandable.js.map +1 -1
  51. package/dist/components/widget/Button/CancelButton/CancelButton.js.map +1 -1
  52. package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.js.map +1 -1
  53. package/dist/components/widget/Button/DismissButton.js.map +1 -1
  54. package/dist/components/widget/Button/RefreshButton.d.ts +3 -0
  55. package/dist/components/widget/Button/RefreshButton.d.ts.map +1 -0
  56. package/dist/components/widget/Button/RefreshButton.js +28 -0
  57. package/dist/components/widget/Button/RefreshButton.js.map +1 -0
  58. package/dist/components/widget/Button/types.d.ts +7 -0
  59. package/dist/components/widget/Button/types.d.ts.map +1 -0
  60. package/dist/components/widget/CompareQuotes/CompareQuotes.d.ts.map +1 -1
  61. package/dist/components/widget/CompareQuotes/CompareQuotes.js +67 -73
  62. package/dist/components/widget/CompareQuotes/CompareQuotes.js.map +1 -1
  63. package/dist/components/widget/Details/DetailWithTooltip.js.map +1 -1
  64. package/dist/components/widget/Details/DetailWithValueList.js.map +1 -1
  65. package/dist/components/widget/Details/DetailWithValueListExpandable.js.map +1 -1
  66. package/dist/components/widget/Details/SwapDetailsExpandable.js.map +1 -1
  67. package/dist/components/widget/DexesList/DexItem.js.map +1 -1
  68. package/dist/components/widget/DexesList/DexesList.js.map +1 -1
  69. package/dist/components/widget/DexesList/getDexProps.js.map +1 -1
  70. package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressDialog.js.map +1 -1
  71. package/dist/components/widget/Dialog/ReceiverAddressDialog/ReceiverAddressInput.js.map +1 -1
  72. package/dist/components/widget/Dialog/SelectTokenDialog/SelectTokenDialog.js.map +1 -1
  73. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/AcrossTokenList.js.map +1 -1
  74. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/RegularTokenList.js.map +1 -1
  75. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenCloud/index.js.map +1 -1
  76. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListBody.js.map +1 -1
  77. package/dist/components/widget/Dialog/SelectTokenDialog/TokenListBody/TokenListRow.js.map +1 -1
  78. package/dist/components/widget/Dialog/SelectTokenDialog/TokenSearch.js.map +1 -1
  79. package/dist/components/widget/Drawer/Overlay.js.map +1 -1
  80. package/dist/components/widget/Drawer/index.js.map +1 -1
  81. package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
  82. package/dist/components/widget/Dropdown/DropdownWithItems.d.ts.map +1 -1
  83. package/dist/components/widget/Dropdown/DropdownWithItems.js +3 -2
  84. package/dist/components/widget/Dropdown/DropdownWithItems.js.map +1 -1
  85. package/dist/components/widget/Dropdown/types.d.ts +1 -1
  86. package/dist/components/widget/Dropdown/types.d.ts.map +1 -1
  87. package/dist/components/widget/Duration/Duration.js.map +1 -1
  88. package/dist/components/widget/Duration/utils.js.map +1 -1
  89. package/dist/components/widget/EnabledExchanges/EnabledExchanges.js.map +1 -1
  90. package/dist/components/widget/EnabledExchanges/EnabledExchangesList.js.map +1 -1
  91. package/dist/components/widget/EnabledList/EnabledList.js.map +1 -1
  92. package/dist/components/widget/FetchingQuotes/FetchingQuotes.js.map +1 -1
  93. package/dist/components/widget/Icon/CheckIcon.js.map +1 -1
  94. package/dist/components/widget/Icon/ChevronIcon.js.map +1 -1
  95. package/dist/components/widget/Icon/DeltaIcon.js.map +1 -1
  96. package/dist/components/widget/Icon/EllipseIcon.js.map +1 -1
  97. package/dist/components/widget/Icon/InfoIcon.js.map +1 -1
  98. package/dist/components/widget/Icon/MarketIcon.js.map +1 -1
  99. package/dist/components/widget/Icon/SliderIcon.js.map +1 -1
  100. package/dist/components/widget/ImportToken/ImportToken.js.map +1 -1
  101. package/dist/components/widget/ImportToken/useImportTokenDrawer.js.map +1 -1
  102. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js.map +1 -1
  103. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js.map +1 -1
  104. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js.map +1 -1
  105. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js +5 -8
  106. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js.map +1 -1
  107. package/dist/components/widget/LimitOrderItem/constants.js.map +1 -1
  108. package/dist/components/widget/LimitOrderItem/utils.js.map +1 -1
  109. package/dist/components/widget/LimitPriceInput/index.js +6 -6
  110. package/dist/components/widget/LimitPriceInput/index.js.map +1 -1
  111. package/dist/components/widget/Line/Line.js.map +1 -1
  112. package/dist/components/widget/ListItem/ListItemWithSwitch.js.map +1 -1
  113. package/dist/components/widget/NetworkIcon/NetworkIconSquare.js.map +1 -1
  114. package/dist/components/widget/NetworkSwitcher/CompactNetworkSwitcher.js.map +1 -1
  115. package/dist/components/widget/NetworkSwitcher/NetworkSwitcherDropdown.js.map +1 -1
  116. package/dist/components/widget/NetworkSwitcher/NetworkSwitcherList.js.map +1 -1
  117. package/dist/components/widget/NetworkSwitcher/common/AllNetworksItem.js.map +1 -1
  118. package/dist/components/widget/NetworkSwitcher/common/NetworkItem.js.map +1 -1
  119. package/dist/components/widget/NetworkSwitcher/utils/items.js.map +1 -1
  120. package/dist/components/widget/NetworkWithIcon/NetworkIconWithChevron.js.map +1 -1
  121. package/dist/components/widget/NetworkWithIcon/NetworkWithIcon.js.map +1 -1
  122. package/dist/components/widget/NumberInput/NumberInput.js.map +1 -1
  123. package/dist/components/widget/OrderExpiryInput/index.js.map +1 -1
  124. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/Controls.js.map +1 -1
  125. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/OtcOrderDetails.js.map +1 -1
  126. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/utils.js.map +1 -1
  127. package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js +5 -8
  128. package/dist/components/widget/OtcOrderItem/OtcOrderListItem.js.map +1 -1
  129. package/dist/components/widget/OtcOrderItem/constants.js.map +1 -1
  130. package/dist/components/widget/OtcOrderItem/utils.js.map +1 -1
  131. package/dist/components/widget/PayReceiveInfo/PayReceiveInfo.js.map +1 -1
  132. package/dist/components/widget/PoweredBy/PoweredBy.js.map +1 -1
  133. package/dist/components/widget/ReceiverAddress/ReceiverAddress.js.map +1 -1
  134. package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js.map +1 -1
  135. package/dist/components/widget/ReceiverAddress/state/subscriptions.js.map +1 -1
  136. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcControls.js.map +1 -1
  137. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/FillOtcReviewAndConfirm.js.map +1 -1
  138. package/dist/components/widget/ReviewAndConfirm/FillOtcReviewAndConfirm/utils.js.map +1 -1
  139. package/dist/components/widget/RowVirtualizer/RowVirtualizerFixed.js.map +1 -1
  140. package/dist/components/widget/Screen/GenericScreen.js.map +1 -1
  141. package/dist/components/widget/Screen/ScreenContainer.js.map +1 -1
  142. package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
  143. package/dist/components/widget/SettingsButton/SettingsButton.js.map +1 -1
  144. package/dist/components/widget/SwapModeSwitcher/SwapModeSwitcherExpandable.js.map +1 -1
  145. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
  146. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js.map +1 -1
  147. package/dist/components/widget/SwapRate/SwapRate.js.map +1 -1
  148. package/dist/components/widget/SwapRate/SwapRateWithTooltip.js.map +1 -1
  149. package/dist/components/widget/SwapRate/utils.js.map +1 -1
  150. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.d.ts +4 -1
  151. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.d.ts.map +1 -1
  152. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js +51 -28
  153. package/dist/components/widget/SwapRateWithPriceImpactRow/SwapRateWithPriceImpactRow.js.map +1 -1
  154. package/dist/components/widget/Tabs/Tabs.js.map +1 -1
  155. package/dist/components/widget/Toasts/CustomToast.js.map +1 -1
  156. package/dist/components/widget/TokenBadge/TokenBadge.js.map +1 -1
  157. package/dist/components/widget/TokenBadge/TokenLink.js.map +1 -1
  158. package/dist/components/widget/TokenInput/InputContainer.js.map +1 -1
  159. package/dist/components/widget/TokenInput/InputField.js.map +1 -1
  160. package/dist/components/widget/TokenInput/InputFooter.js.map +1 -1
  161. package/dist/components/widget/TokenInput/InputHeader.js.map +1 -1
  162. package/dist/components/widget/TokenInput/common/Balance.js.map +1 -1
  163. package/dist/components/widget/TokenInput/common/MaxButtons.js.map +1 -1
  164. package/dist/components/widget/TokenInput/index.js.map +1 -1
  165. package/dist/components/widget/TokenSwitcher/TokenSwitcher.js.map +1 -1
  166. package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.js.map +1 -1
  167. package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.js.map +1 -1
  168. package/dist/components/widget/TradeOverview/CancelOrder/utils.js.map +1 -1
  169. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js.map +1 -1
  170. package/dist/components/widget/TradeOverview/FillOtcOrderTradeOverview.js.map +1 -1
  171. package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.js.map +1 -1
  172. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js.map +1 -1
  173. package/dist/components/widget/TradeOverview/OtcOrderTradeOverview.js.map +1 -1
  174. package/dist/components/widget/TradeOverview/Step/Step.js.map +1 -1
  175. package/dist/components/widget/TradeOverview/Step/utils.js.map +1 -1
  176. package/dist/components/widget/TradeOverview/Stepper.js.map +1 -1
  177. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js.map +1 -1
  178. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js.map +1 -1
  179. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompletedDetails.js.map +1 -1
  180. package/dist/components/widget/TradeOverview/TradeComplete/index.js.map +1 -1
  181. package/dist/components/widget/TradeOverview/TradeComplete/useTradeCompleteDetails.js.map +1 -1
  182. package/dist/components/widget/TradeOverview/TradeComplete/utils.js.map +1 -1
  183. package/dist/components/widget/TradeOverview/TradeDetails.js.map +1 -1
  184. package/dist/components/widget/TradeOverview/TradeDetailsDisplay.js.map +1 -1
  185. package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.js.map +1 -1
  186. package/dist/components/widget/TradeOverview/TradeError/TradeErrorFooter.js.map +1 -1
  187. package/dist/components/widget/TradeOverview/TradeError/index.js.map +1 -1
  188. package/dist/components/widget/TradeOverview/TradeError/utils.js.map +1 -1
  189. package/dist/components/widget/TradeOverview/TradeOverview.js.map +1 -1
  190. package/dist/components/widget/TradeOverview/TradeOverviewFooter.js.map +1 -1
  191. package/dist/components/widget/TradeOverview/TradeOverviewHeader.js.map +1 -1
  192. package/dist/components/widget/TradeOverview/TradeOverviewScreen.js.map +1 -1
  193. package/dist/components/widget/TradeOverview/TwapOrderTradeOverview.js.map +1 -1
  194. package/dist/components/widget/TradeOverview/VerticalDash.js.map +1 -1
  195. package/dist/components/widget/TradeOverview/tradeFlowContext.js.map +1 -1
  196. package/dist/components/widget/TradeOverview/utils/isNonFlowStep.js.map +1 -1
  197. package/dist/components/widget/TradeOverview/utils/preWrap.js.map +1 -1
  198. package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.js.map +1 -1
  199. package/dist/components/widget/TradeParameters/BridgePreferenceParameters/BridgePreferenceParameters.js.map +1 -1
  200. package/dist/components/widget/TradeParameters/BridgePreferenceParameters/useDraftBridgePreferencesState.js.map +1 -1
  201. package/dist/components/widget/TradeParameters/DegenModeConfirmation.js.map +1 -1
  202. package/dist/components/widget/TradeParameters/DegenModeParameter.js.map +1 -1
  203. package/dist/components/widget/TradeParameters/DeltaParameter.js.map +1 -1
  204. package/dist/components/widget/TradeParameters/EIP1559Parameter.js.map +1 -1
  205. package/dist/components/widget/TradeParameters/EnabledExchangesParameters/EnabledExchangesParameters.js.map +1 -1
  206. package/dist/components/widget/TradeParameters/EnabledExchangesParameters/useDraftEnabledExchangesState.js.map +1 -1
  207. package/dist/components/widget/TradeParameters/SlippageParameter/CustomSlippageInput.js.map +1 -1
  208. package/dist/components/widget/TradeParameters/SlippageParameter/EditSlippage.js.map +1 -1
  209. package/dist/components/widget/TradeParameters/SlippageParameter/SlippageParameter.js.map +1 -1
  210. package/dist/components/widget/TradeParameters/SlippageParameter/hooks/useCustomSlippageProps.js.map +1 -1
  211. package/dist/components/widget/TradeParameters/TradeParameters.js.map +1 -1
  212. package/dist/components/widget/TradeParameters/TransactionSpeedParameter.js.map +1 -1
  213. package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js.map +1 -1
  214. package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.js.map +1 -1
  215. package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.js.map +1 -1
  216. package/dist/components/widget/TradeParameters/state/bridgePreferences/excludeBridgesAtom.js.map +1 -1
  217. package/dist/components/widget/TradeParameters/state/bridgePreferences/protocolNameAtom.js.map +1 -1
  218. package/dist/components/widget/TradeParameters/state/bridgePreferences/resetDraftsAtom.js.map +1 -1
  219. package/dist/components/widget/TradeParameters/state/bridgePreferences/useBridgePreferences.js.map +1 -1
  220. package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js.map +1 -1
  221. package/dist/components/widget/TradeParameters/state/enabledExchanges/disabledDexesAtomFamily.js.map +1 -1
  222. package/dist/components/widget/TradeParameters/state/enabledExchanges/useDisabledDexes.js.map +1 -1
  223. package/dist/components/widget/TradeParameters/state/slippageParamAtom.js.map +1 -1
  224. package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.js.map +1 -1
  225. package/dist/components/widget/TradeParameters/useTempTradeParameters.js.map +1 -1
  226. package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.js.map +1 -1
  227. package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.js.map +1 -1
  228. package/dist/components/widget/TransactionDetails/LimitOrderDetails/utils.js.map +1 -1
  229. package/dist/components/widget/TransactionDetails/TransactionListItem.js.map +1 -1
  230. package/dist/components/widget/TransactionDetails/utils.js.map +1 -1
  231. package/dist/components/widget/Twap/CustomDurationDrawer.js.map +1 -1
  232. package/dist/components/widget/Twap/OrderDuration.js.map +1 -1
  233. package/dist/components/widget/Twap/OrderSplit.js.map +1 -1
  234. package/dist/components/widget/Twap/RateProtection.js.map +1 -1
  235. package/dist/components/widget/Twap/TwapDetailWithTooltip.js.map +1 -1
  236. package/dist/components/widget/Warning/InsufficientBalanceMessage.js.map +1 -1
  237. package/dist/components/widget/Warning/Warning.js.map +1 -1
  238. package/dist/components/widget/Warning/WarningMessage.js.map +1 -1
  239. package/dist/components/widget/WrapEth/WrapEthContent.js.map +1 -1
  240. package/dist/components/widget/WrapEth/WrapEthDrawerButton.js.map +1 -1
  241. package/dist/components/widget/WrapEth/hooks/useSubmitDepositTxMutation.js.map +1 -1
  242. package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js.map +1 -1
  243. package/dist/components/widget/YouGet/YouGet.js.map +1 -1
  244. package/dist/core/ConnectWalletDrawerButton.js.map +1 -1
  245. package/dist/core/LimitOrderButton.js.map +1 -1
  246. package/dist/core/LimitOrderDetails.js.map +1 -1
  247. package/dist/core/OtcOrderButton.js.map +1 -1
  248. package/dist/core/OtcOrderDetails.js.map +1 -1
  249. package/dist/core/Toaster.js.map +1 -1
  250. package/dist/core/TradeFlowScreenButton.js.map +1 -1
  251. package/dist/core/TwapDetails.js.map +1 -1
  252. package/dist/core/Updaters.js.map +1 -1
  253. package/dist/core/Warnings.js.map +1 -1
  254. package/dist/core/across/isCrosschainPossible.js.map +1 -1
  255. package/dist/core/across/utils.js.map +1 -1
  256. package/dist/core/button/hooks/useWidgetButtonExtraProps.js.map +1 -1
  257. package/dist/core/index.js.map +1 -1
  258. package/dist/core/inputs/hooks/useMaxButtonProps.js.map +1 -1
  259. package/dist/core/inputs/hooks/useTokenFromInputProps.js.map +1 -1
  260. package/dist/core/inputs/hooks/useTokenSwitcherProps.js.map +1 -1
  261. package/dist/core/inputs/hooks/useTokenToInputProps.js.map +1 -1
  262. package/dist/core/inputs/hooks/useWarningMessage.js.map +1 -1
  263. package/dist/core/inputs/hooks/utils.js.map +1 -1
  264. package/dist/core/inputs/state/common.js.map +1 -1
  265. package/dist/core/inputs/state/inputAmountAtom.js.map +1 -1
  266. package/dist/core/inputs/state/selectedTokenActionsAtom.js.map +1 -1
  267. package/dist/core/inputs/state/selectedTokenAtom.js.map +1 -1
  268. package/dist/core/inputs/state/setTokenByAddressAtom.d.ts.map +1 -1
  269. package/dist/core/inputs/state/setTokenByAddressAtom.js +1 -1
  270. package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
  271. package/dist/core/inputs/state/subscriptions.js.map +1 -1
  272. package/dist/core/limit/state/deadlineAtom.js.map +1 -1
  273. package/dist/core/limit/state/isCrosschainAtom.js.map +1 -1
  274. package/dist/core/limit/state/limitInputActionsAtom.js.map +1 -1
  275. package/dist/core/limit/state/limitInputAmountAtom.js.map +1 -1
  276. package/dist/core/limit/state/receiverAddressAtom.js.map +1 -1
  277. package/dist/core/limit/state/selectedTokenActionsAtom.js.map +1 -1
  278. package/dist/core/limit/state/selectedTokenAtom.js.map +1 -1
  279. package/dist/core/limit/state/utils.js.map +1 -1
  280. package/dist/core/limit/useLimitDetailsListProps.js.map +1 -1
  281. package/dist/core/limit/useLimitNotSupported.js.map +1 -1
  282. package/dist/core/limit/useLimitPriceDifference.js.map +1 -1
  283. package/dist/core/limit/useLimitPriceInputProps.js.map +1 -1
  284. package/dist/core/limit/useLimitRate.js.map +1 -1
  285. package/dist/core/limit/useLimitTokenFromInputProps.js.map +1 -1
  286. package/dist/core/limit/useLimitTokenSwitcherProps.js.map +1 -1
  287. package/dist/core/limit/useLimitTokenToInputProps.js.map +1 -1
  288. package/dist/core/logger.js.map +1 -1
  289. package/dist/core/otc/state/deadlineAtom.js.map +1 -1
  290. package/dist/core/otc/state/otcInputActionsAtom.js.map +1 -1
  291. package/dist/core/otc/state/otcInputAmountAtom.js.map +1 -1
  292. package/dist/core/otc/state/receiverAddressAtom.js.map +1 -1
  293. package/dist/core/otc/state/selectedTokenActionsAtom.js.map +1 -1
  294. package/dist/core/otc/state/selectedTokenAtom.js.map +1 -1
  295. package/dist/core/otc/useOtcDetailsListProps.js.map +1 -1
  296. package/dist/core/otc/useOtcNotSupported.js.map +1 -1
  297. package/dist/core/otc/useOtcPriceDifference.js.map +1 -1
  298. package/dist/core/otc/useOtcPriceInputProps.js.map +1 -1
  299. package/dist/core/otc/useOtcTokenFromInputProps.js.map +1 -1
  300. package/dist/core/otc/useOtcTokenSwitcherProps.js.map +1 -1
  301. package/dist/core/otc/useOtcTokenToInputProps.js.map +1 -1
  302. package/dist/core/screen/hooks/useInitialValue.js.map +1 -1
  303. package/dist/core/screen/hooks/useOnClickOutside.js.map +1 -1
  304. package/dist/core/screen/hooks/useResizeObserver.js.map +1 -1
  305. package/dist/core/screen/hooks/useRunOnMount.js.map +1 -1
  306. package/dist/core/screen/state/hooks/useScreen.js.map +1 -1
  307. package/dist/core/screen/state/hooks/useScreenValue.js.map +1 -1
  308. package/dist/core/screen/state/hooks/useSetScreen.js.map +1 -1
  309. package/dist/core/screen/state/screenAtom.js.map +1 -1
  310. package/dist/core/state/apiConfigAtom.js.map +1 -1
  311. package/dist/core/state/chainToAtom.js.map +1 -1
  312. package/dist/core/state/configActionsAtom.js.map +1 -1
  313. package/dist/core/state/configAtom.js +2 -2
  314. package/dist/core/state/configAtom.js.map +1 -1
  315. package/dist/core/state/configEffectAtom.js.map +1 -1
  316. package/dist/core/state/containerAtom.js.map +1 -1
  317. package/dist/core/state/enabledChainsAtom.js.map +1 -1
  318. package/dist/core/state/enabledTradeModesAtom.d.ts +7 -1
  319. package/dist/core/state/enabledTradeModesAtom.d.ts.map +1 -1
  320. package/dist/core/state/enabledTradeModesAtom.js +1 -1
  321. package/dist/core/state/enabledTradeModesAtom.js.map +1 -1
  322. package/dist/core/state/externalProviderAtom.js.map +1 -1
  323. package/dist/core/state/getSelectableDestChains.js.map +1 -1
  324. package/dist/core/state/isCrosschainAtom.js.map +1 -1
  325. package/dist/core/state/tradeModeAtom.js +1 -1
  326. package/dist/core/state/tradeModeAtom.js.map +1 -1
  327. package/dist/core/state/validatedPartnerConfigAtom.js.map +1 -1
  328. package/dist/core/state/validatedReferrerConfigAtom.js.map +1 -1
  329. package/dist/core/state/widgetEventsAtom.js.map +1 -1
  330. package/dist/core/subscriptions.js.map +1 -1
  331. package/dist/core/swapDetails/fees.js.map +1 -1
  332. package/dist/core/swapDetails/maxToPay.js.map +1 -1
  333. package/dist/core/swapDetails/orderRouting.js.map +1 -1
  334. package/dist/core/swapDetails/priceImpact.js.map +1 -1
  335. package/dist/core/swapDetails/useSwapDetailsListProps.d.ts.map +1 -1
  336. package/dist/core/swapDetails/useSwapDetailsListProps.js +37 -31
  337. package/dist/core/swapDetails/useSwapDetailsListProps.js.map +1 -1
  338. package/dist/core/swapDetails/youGet.js.map +1 -1
  339. package/dist/core/twap/state/isCrosschainAtom.js.map +1 -1
  340. package/dist/core/twap/state/selectedTokenActionsAtom.js.map +1 -1
  341. package/dist/core/twap/state/twapInputAmountAtom.js.map +1 -1
  342. package/dist/core/twap/state/twapParamsAtom.js.map +1 -1
  343. package/dist/core/twap/state/twapSideAtom.js.map +1 -1
  344. package/dist/core/twap/twapDetails/minimumReceiveable.js.map +1 -1
  345. package/dist/core/twap/useTwapDetailsListProps.d.ts.map +1 -1
  346. package/dist/core/twap/useTwapDetailsListProps.js +36 -31
  347. package/dist/core/twap/useTwapDetailsListProps.js.map +1 -1
  348. package/dist/core/twap/useTwapTokenFromInputProps.js.map +1 -1
  349. package/dist/core/twap/useTwapTokenSwitcherProps.js.map +1 -1
  350. package/dist/core/twap/useTwapTokenToInputProps.js.map +1 -1
  351. package/dist/events/effects/formInput.js.map +1 -1
  352. package/dist/events/effects/price.js.map +1 -1
  353. package/dist/events/effects/swapMode.js.map +1 -1
  354. package/dist/events/getters/limit.js.map +1 -1
  355. package/dist/events/getters/otc.js.map +1 -1
  356. package/dist/events/getters/settings.js.map +1 -1
  357. package/dist/events/getters/swap.js.map +1 -1
  358. package/dist/events/getters/twap.js.map +1 -1
  359. package/dist/events/getters/widgetState.js.map +1 -1
  360. package/dist/events/hooks/useActivateEffects.js.map +1 -1
  361. package/dist/events/hooks/useOnPriceUpdates.js.map +1 -1
  362. package/dist/events/hooks/useOnWalletConnect.js.map +1 -1
  363. package/dist/external/.pnpm/vaul@1.1.2_patch_hash_07b36ba5def3805dde9d543a880ba9e4caf55e5eb58e544faaa2c186846bf3c1__6feb48fe37bd41e9af5c8e81d5a6f4e1/external/vaul/dist/index.js.map +1 -1
  364. package/dist/hooks/batch/useAwaitCalls.js.map +1 -1
  365. package/dist/hooks/batch/useBatchWithApproveTxs.js.map +1 -1
  366. package/dist/hooks/batch/useCanBatchTxs.js.map +1 -1
  367. package/dist/hooks/batch/useSendBatchTx.js.map +1 -1
  368. package/dist/hooks/connectors/useIsConnectedSafe.js.map +1 -1
  369. package/dist/hooks/connectors/useIsGnosisSafeConnector.js.map +1 -1
  370. package/dist/hooks/connectors/useIsSafeThroughWalletConnect.js.map +1 -1
  371. package/dist/hooks/gas/useGasPrices.js.map +1 -1
  372. package/dist/hooks/gas/utils.js.map +1 -1
  373. package/dist/hooks/getCode/query.js.map +1 -1
  374. package/dist/hooks/getCode/useIsAccountContract.js.map +1 -1
  375. package/dist/hooks/getCode/useIsContractAtAddress.js.map +1 -1
  376. package/dist/hooks/otc/mutations/useCancelLimitOrder.js.map +1 -1
  377. package/dist/hooks/otc/mutations/useCreateLimitOrder.js.map +1 -1
  378. package/dist/hooks/otc/mutations/useFillOrder.js.map +1 -1
  379. package/dist/hooks/otc/mutations/utils.js.map +1 -1
  380. package/dist/hooks/otc/queries/useLimitOrderRequiredBalance.js.map +1 -1
  381. package/dist/hooks/otc/queries/useLimitOrders.js.map +1 -1
  382. package/dist/hooks/otc/tradeFlow/useFillOtcOrderFlow.js.map +1 -1
  383. package/dist/hooks/otc/tradeFlow/useFillOtcOrderStep.js.map +1 -1
  384. package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.js.map +1 -1
  385. package/dist/hooks/otc/tradeFlow/useOtcOrderStep.js.map +1 -1
  386. package/dist/hooks/permit/hooks/common/useSignArbitraryTypedData.js.map +1 -1
  387. package/dist/hooks/permit/hooks/common/useSignPermit.js.map +1 -1
  388. package/dist/hooks/permit/hooks/common/useWalletSupportsPermit.js.map +1 -1
  389. package/dist/hooks/permit/hooks/permit1/useGetPermitInfo.js.map +1 -1
  390. package/dist/hooks/permit/hooks/permit1/useGetSafePermitInfo.js.map +1 -1
  391. package/dist/hooks/permit/hooks/permit1/usePermit1Nonce.js.map +1 -1
  392. package/dist/hooks/permit/hooks/permit1/useSignTokenPermit1.js.map +1 -1
  393. package/dist/hooks/permit/hooks/permit1/useTokenFromPermit1Nonce.js.map +1 -1
  394. package/dist/hooks/permit/hooks/permit1/useTokenFromPermitInfo.js.map +1 -1
  395. package/dist/hooks/permit/hooks/permit1/useTryToSignPermit1.js.map +1 -1
  396. package/dist/hooks/permit/hooks/permit2/usePermit2Allowance.js.map +1 -1
  397. package/dist/hooks/permit/hooks/permit2/usePermit2TransferFromNonce.js.map +1 -1
  398. package/dist/hooks/permit/hooks/permit2/useSignTokenPermit2TransferFrom.js.map +1 -1
  399. package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2Allowance.js.map +1 -1
  400. package/dist/hooks/permit/hooks/permit2/useTokenFromPermit2TransferFromNonce.js.map +1 -1
  401. package/dist/hooks/permit/utils/constants.js.map +1 -1
  402. package/dist/hooks/permit/utils/construct.js.map +1 -1
  403. package/dist/hooks/permit/utils/deadlines.js.map +1 -1
  404. package/dist/hooks/permit/utils/detect.js.map +1 -1
  405. package/dist/hooks/permit/utils/domainSeparator.js.map +1 -1
  406. package/dist/hooks/permit/utils/encodeArgs.js.map +1 -1
  407. package/dist/hooks/permit/utils/trySignPermit1.js.map +1 -1
  408. package/dist/hooks/permit/utils/utils.js.map +1 -1
  409. package/dist/hooks/sdk/useGetContracts.js.map +1 -1
  410. package/dist/hooks/sdk/useSpender.js.map +1 -1
  411. package/dist/hooks/swap/prices/delta/bridge/useSelectedBridgePrice.js.map +1 -1
  412. package/dist/hooks/swap/prices/delta/bridge/utils.js.map +1 -1
  413. package/dist/hooks/swap/prices/delta/mutations/twap/useCreatePreSignableTwapOrder.js.map +1 -1
  414. package/dist/hooks/swap/prices/delta/mutations/twap/useCreateTwapOrder.js.map +1 -1
  415. package/dist/hooks/swap/prices/delta/mutations/twap/useDepositAndSubmitTwapOrder.js.map +1 -1
  416. package/dist/hooks/swap/prices/delta/mutations/twap/usePostTwapOrder.js.map +1 -1
  417. package/dist/hooks/swap/prices/delta/mutations/twap/usePreSignAndSubmitTwapOrder.js.map +1 -1
  418. package/dist/hooks/swap/prices/delta/mutations/twap/useTwapOrderToPost.js.map +1 -1
  419. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.js.map +1 -1
  420. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js.map +1 -1
  421. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js.map +1 -1
  422. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
  423. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js.map +1 -1
  424. package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js.map +1 -1
  425. package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.js.map +1 -1
  426. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js.map +1 -1
  427. package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.js.map +1 -1
  428. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js.map +1 -1
  429. package/dist/hooks/swap/prices/delta/mutations/utils.js.map +1 -1
  430. package/dist/hooks/swap/prices/delta/orders/unposted/effect.js.map +1 -1
  431. package/dist/hooks/swap/prices/delta/orders/unposted/index.js.map +1 -1
  432. package/dist/hooks/swap/prices/delta/orders/unposted/storage.js.map +1 -1
  433. package/dist/hooks/swap/prices/delta/orders/unposted/utils.js.map +1 -1
  434. package/dist/hooks/swap/prices/delta/orders/utils.js.map +1 -1
  435. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/bridgeInfosLoadedAtom.js.map +1 -1
  436. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/common.js.map +1 -1
  437. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/getBridgeInfoQueryData.js.map +1 -1
  438. package/dist/hooks/swap/prices/delta/queries/bridgeInfo/useBridgeInfo.js.map +1 -1
  439. package/dist/hooks/swap/prices/delta/queries/bridgeProtocols/useBridgeProtocols.js.map +1 -1
  440. package/dist/hooks/swap/prices/delta/queries/errors.js.map +1 -1
  441. package/dist/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance.js.map +1 -1
  442. package/dist/hooks/swap/prices/delta/queries/useDeltaOrderPreConditions.js.map +1 -1
  443. package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.js.map +1 -1
  444. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
  445. package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js.map +1 -1
  446. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js.map +1 -1
  447. package/dist/hooks/swap/prices/factory.js.map +1 -1
  448. package/dist/hooks/swap/prices/market/mutations/useBuildTx.js.map +1 -1
  449. package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js.map +1 -1
  450. package/dist/hooks/swap/prices/market/queries/dexesList/useDexesList.js.map +1 -1
  451. package/dist/hooks/swap/prices/market/queries/errors.js.map +1 -1
  452. package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
  453. package/dist/hooks/swap/prices/market/queries/useSpenderAndContracts.js.map +1 -1
  454. package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
  455. package/dist/hooks/swap/prices/useSwapPrices.d.ts +4 -7
  456. package/dist/hooks/swap/prices/useSwapPrices.d.ts.map +1 -1
  457. package/dist/hooks/swap/prices/useSwapPrices.js +28 -24
  458. package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
  459. package/dist/hooks/swap/prices/useTokenInputsFromPrice.js.map +1 -1
  460. package/dist/hooks/swap/prices/useTokenInputsFromTwapPrice.js.map +1 -1
  461. package/dist/hooks/swap/prices/useTwapPrices.js.map +1 -1
  462. package/dist/hooks/swap/tradeFlow/common/errors.js.map +1 -1
  463. package/dist/hooks/swap/tradeFlow/common/factory/depositAndSubmitOrderFactory.js.map +1 -1
  464. package/dist/hooks/swap/tradeFlow/common/factory/preSignAndSubmitOrderFactory.js.map +1 -1
  465. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.js.map +1 -1
  466. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermitEvents.js.map +1 -1
  467. package/dist/hooks/swap/tradeFlow/common/useBatchWrapAndApprove.js.map +1 -1
  468. package/dist/hooks/swap/tradeFlow/common/useConstructGasParams.js.map +1 -1
  469. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js.map +1 -1
  470. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js.map +1 -1
  471. package/dist/hooks/swap/tradeFlow/common/useRequiredAllowanceForOrders.js.map +1 -1
  472. package/dist/hooks/swap/tradeFlow/common/useSignPermit1Or2.js.map +1 -1
  473. package/dist/hooks/swap/tradeFlow/common/utils.js.map +1 -1
  474. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
  475. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
  476. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
  477. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js.map +1 -1
  478. package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
  479. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
  480. package/dist/hooks/swap/tradeFlow/useTwapFlow.js.map +1 -1
  481. package/dist/hooks/swap/tradeFlow/useTwapSwapStep.js.map +1 -1
  482. package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js.map +1 -1
  483. package/dist/hooks/tokens/allowance/useTokenAllowance.js.map +1 -1
  484. package/dist/hooks/tokens/allowance/utils.js.map +1 -1
  485. package/dist/hooks/tokens/balances/queries.js.map +1 -1
  486. package/dist/hooks/tokens/balances/useAttachTokenBalanceMultichain.js.map +1 -1
  487. package/dist/hooks/tokens/balances/useInvalidateTokenData.js.map +1 -1
  488. package/dist/hooks/tokens/balances/useIsInsufficientTokenBalance.js.map +1 -1
  489. package/dist/hooks/tokens/balances/useIsLimitOrderInsufficientBalance.js.map +1 -1
  490. package/dist/hooks/tokens/balances/useMultichainTokenBalances.js.map +1 -1
  491. package/dist/hooks/tokens/balances/useSelectedTokenBalances.js.map +1 -1
  492. package/dist/hooks/tokens/balances/useTokenBalance.js.map +1 -1
  493. package/dist/hooks/tokens/data/useCombineTokensWithFetched.js.map +1 -1
  494. package/dist/hooks/tokens/data/useFetchTokens.js.map +1 -1
  495. package/dist/hooks/tokens/data/useMultichainTokensData.js.map +1 -1
  496. package/dist/hooks/tokens/prices/queries.js.map +1 -1
  497. package/dist/hooks/tokens/prices/useMultichainTokenPrices.js.map +1 -1
  498. package/dist/hooks/tokens/prices/useTokenPrices.js.map +1 -1
  499. package/dist/hooks/tokens/useAllTokensWithFilter.js.map +1 -1
  500. package/dist/hooks/tokens/useNativeToken.js.map +1 -1
  501. package/dist/hooks/tokens/useTokenTaxFee.js.map +1 -1
  502. package/dist/hooks/tokens/useTokensByAddress.js.map +1 -1
  503. package/dist/hooks/tokens/useTokensFromAcross.js.map +1 -1
  504. package/dist/hooks/txs/mutations/useApprove.js.map +1 -1
  505. package/dist/hooks/txs/mutations/useDepositWeth.js.map +1 -1
  506. package/dist/hooks/txs/mutations/useReplaceTx.js.map +1 -1
  507. package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
  508. package/dist/hooks/txs/queries/useAccountNonce.js.map +1 -1
  509. package/dist/hooks/txs/queries/useAwaitTx.js.map +1 -1
  510. package/dist/hooks/txs/queries/useTxFees.js.map +1 -1
  511. package/dist/hooks/txs/queries/useTxHistory.js.map +1 -1
  512. package/dist/hooks/txs/queries/useTxResponse.js.map +1 -1
  513. package/dist/hooks/txs/queries/useWalletCanReplaceTx.js.map +1 -1
  514. package/dist/hooks/txs/queries/utils.js.map +1 -1
  515. package/dist/hooks/useAvailableCrosses.js.map +1 -1
  516. package/dist/hooks/useBreakpoints.js.map +1 -1
  517. package/dist/hooks/useBridgeInfo.js.map +1 -1
  518. package/dist/hooks/useBridgeProtocols.js.map +1 -1
  519. package/dist/hooks/useCachedQueryError.js.map +1 -1
  520. package/dist/hooks/useChainMatches.js.map +1 -1
  521. package/dist/hooks/useClickOutside.js.map +1 -1
  522. package/dist/hooks/useCurrentChain.js.map +1 -1
  523. package/dist/hooks/useDebouncedInputState.js.map +1 -1
  524. package/dist/hooks/useEIP1559Enabled.js.map +1 -1
  525. package/dist/hooks/useGlobalDeltaEnabled.js.map +1 -1
  526. package/dist/hooks/useIsCrosschainPossible.js.map +1 -1
  527. package/dist/hooks/useMinViemClient.js.map +1 -1
  528. package/dist/hooks/useSDK.js.map +1 -1
  529. package/dist/hooks/useSelectableDestChains.js.map +1 -1
  530. package/dist/hooks/useSlippage.js.map +1 -1
  531. package/dist/hooks/useSwitchChainWithGuard.js.map +1 -1
  532. package/dist/lib/constants/urls.js.map +1 -1
  533. package/dist/lib/ipfs.js.map +1 -1
  534. package/dist/lib/queryClient.js.map +1 -1
  535. package/dist/lib/tradeMode.d.ts +1 -0
  536. package/dist/lib/tradeMode.d.ts.map +1 -1
  537. package/dist/lib/tradeMode.js +4 -1
  538. package/dist/lib/tradeMode.js.map +1 -1
  539. package/dist/lib/utils/approval.js.map +1 -1
  540. package/dist/lib/utils/atomWithCompare.js.map +1 -1
  541. package/dist/lib/utils/copyToClipboard.js.map +1 -1
  542. package/dist/lib/utils/delta.js.map +1 -1
  543. package/dist/lib/utils/dexes.js.map +1 -1
  544. package/dist/lib/utils/explorer.js.map +1 -1
  545. package/dist/lib/utils/fee.js.map +1 -1
  546. package/dist/lib/utils/formatFiatPrice.js.map +1 -1
  547. package/dist/lib/utils/formatPercent.js.map +1 -1
  548. package/dist/lib/utils/formatTokenBalance.js.map +1 -1
  549. package/dist/lib/utils/index.js.map +1 -1
  550. package/dist/lib/utils/logger.js.map +1 -1
  551. package/dist/lib/utils/metabase.js.map +1 -1
  552. package/dist/lib/utils/mobile.js.map +1 -1
  553. package/dist/lib/utils/price.js.map +1 -1
  554. package/dist/lib/utils/priceImpact.js.map +1 -1
  555. package/dist/lib/utils/providerErrors.js.map +1 -1
  556. package/dist/lib/utils/rate.js.map +1 -1
  557. package/dist/lib/utils/removeZeroDecimals.js.map +1 -1
  558. package/dist/lib/utils/savedAmountUSD.js.map +1 -1
  559. package/dist/lib/utils/scaleFactor.js.map +1 -1
  560. package/dist/lib/utils/slippage.js.map +1 -1
  561. package/dist/lib/utils/time.js.map +1 -1
  562. package/dist/lib/utils/toDecimal.js.map +1 -1
  563. package/dist/lib/utils/toasts.js.map +1 -1
  564. package/dist/lib/utils/tradeFlow.js.map +1 -1
  565. package/dist/lib/utils/transactionHandlers.js.map +1 -1
  566. package/dist/lib/utils/tuple.js.map +1 -1
  567. package/dist/lib/utils/twap.js.map +1 -1
  568. package/dist/lib/utils/useDateNow.js.map +1 -1
  569. package/dist/lib/web3/wagmi/config.d.ts +0 -18
  570. package/dist/lib/web3/wagmi/config.d.ts.map +1 -1
  571. package/dist/lib/web3/wagmi/config.js +19 -6
  572. package/dist/lib/web3/wagmi/config.js.map +1 -1
  573. package/dist/lib/web3/wagmi/external.js.map +1 -1
  574. package/dist/lib/web3/wagmi/isInsideSafeIframe.js.map +1 -1
  575. package/dist/lib/web3/wagmi/switchChain.js.map +1 -1
  576. package/dist/lib/web3/wagmi/utils.js.map +1 -1
  577. package/dist/styles.css +1 -1
  578. package/dist/tokens/blacklist.js.map +1 -1
  579. package/dist/tokens/constructor.js.map +1 -1
  580. package/dist/tokens/defaultTokens.js.map +1 -1
  581. package/dist/tokens/hooks.js.map +1 -1
  582. package/dist/tokens/lists/constants.js.map +1 -1
  583. package/dist/tokens/lists/download.js.map +1 -1
  584. package/dist/tokens/lists/state/effects.js.map +1 -1
  585. package/dist/tokens/lists/state/tokenListsActionsAtom.js.map +1 -1
  586. package/dist/tokens/lists/state/tokenListsStateAtom.js.map +1 -1
  587. package/dist/tokens/overrides.js.map +1 -1
  588. package/dist/tokens/queries.js.map +1 -1
  589. package/dist/tokens/stabeCoins/hooks.js.map +1 -1
  590. package/dist/tokens/stabeCoins/index.js.map +1 -1
  591. package/dist/tokens/state/addImportedTokenAtom.js.map +1 -1
  592. package/dist/tokens/state/allTokensByChainAtom.js.map +1 -1
  593. package/dist/tokens/state/constructTokens.js.map +1 -1
  594. package/dist/tokens/state/fromListsAtom.js.map +1 -1
  595. package/dist/tokens/utils/areTokensSame.js.map +1 -1
  596. package/dist/tokens/utils/brand.js.map +1 -1
  597. package/dist/tokens/utils/eth.js.map +1 -1
  598. package/dist/tokens/utils/filtering.js.map +1 -1
  599. package/dist/tokens/utils/sets.js.map +1 -1
  600. package/dist/tokens/utils/sorting.js.map +1 -1
  601. package/dist/tokens/utils/transferAmountsFromReceipt.js.map +1 -1
  602. package/dist/transactions/hash.js.map +1 -1
  603. package/dist/transactions/queries/ensureCallsStatus.js.map +1 -1
  604. package/dist/transactions/queries/ensureEstimateFeesPerGas.js.map +1 -1
  605. package/dist/transactions/queries/ensureTxReceipt.js.map +1 -1
  606. package/dist/transactions/queries/ensureTxResponse.js.map +1 -1
  607. package/dist/transactions/state/effects/finalize.js.map +1 -1
  608. package/dist/transactions/state/hooks/useActivateEffects.js.map +1 -1
  609. package/dist/transactions/state/hooks/useMarkTxAsDropped.js.map +1 -1
  610. package/dist/transactions/state/hooks/useTransactions.js.map +1 -1
  611. package/dist/transactions/state/transactionsActionAtom.js.map +1 -1
  612. package/dist/transactions/state/transactionsAtom.js.map +1 -1
  613. package/dist/transactions/status.js.map +1 -1
  614. package/dist/transactions/utils.js.map +1 -1
  615. package/package.json +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"useTwapFlow.js","names":["BridgePrice","DeltaPrice","useAccount","assert","useEnsureTxReceipt","Address","Hash","TransactionReceipt","ApprovalFlowResult","SignPermitFlowResult","SubmitTxResult","useMinViemClient","useWatchDeltaAuction","getOverallOrderStatus","useMutation","useRef","SupportedChainId","UserCancelledError","useTwapReceiverAddressValue","CallsSentObject","TxSentObject","useApproveOrPermit","useMarkPermit1Or2NonceAsUsed","SignedPermitResult","useLogger","isBridgePrice","useSubscribeToDeltaPrice","usePartner","useWidgetEvents","shouldApproveOrBatch","getSwapSideFromDeltaPrice","DeltaOrBridgePrice","isETHaddress","useCancelOrWithdrawAndCancelDeltaOrder","CancelDeltaOrdersReturn","useReferrer","useTwapPrices","useTwapSide","useTwapDuration","useTwapSlippage","useCreateAndSubmitTwapOrder","CreateAndSubmitTwapOrderInput","DeltaAuctionWithTwapOrder","BuildTWAPSellOrBuySpecificParams","getTwapAmountsFromPrice","produceTwapDeadlines","usePreSignAndSubmitTwapOrder","TwapOrderPreSignResult","useDepositAndSubmitTwapOrder","TwapOrderDepositResult","amountAfterSlippage","DEFAULT_DELTA_BRIDGE","CancelOrderStepKey","HALF_MINUTE_MS","twapOrderFlowType","UseTwapFlowInput","twapPrice","SubmitTwapOrderResult","tradeFlowType","approve","twapOrder","sentOrder","lastOrderState","account","receiverAddress","OnTxSent","txSent","RunTwapOrderOptions","onTxSent","TwapOrderSubmissionResult","order","isCreatingOrder","isPostingOrder","isOrderSent","isPending","isError","isSuccess","error","Error","TwapOrderExecutionResult","isOrderPending","isOrderExecuting","isOrderExecuted","TwapOrderCancelationResult","step","receipt","txHash","response","isCancelingOrder","isOrderCancellable","isOrderCanceled","result","UseTwapFlowResult","chainId","runTwapOrderFlow","options","Promise","reset","cancelFlow","retryFlow","cancelTwapOrder","approval","signPermit","twapOrderPreSign","twapOrderDeposit","twapOrderSubmission","twapOrderExecution","twapOrderCancelation","usedPrice","freshPrice","submittedTwapOrder","TWAP_ORDER_MUTATION_KEY","useTwapFlow","_twapPrice","logger","queryKey","price","refetch","totalSrcAmount","side","sideFromPrices","numSlices","priceParams","enabled","twapSideFromInput","twapSide","approveTxMut","signPermitMut","events","approveOrPermitEvents","srcToken","srcAmount","spenderContractType","swapSide","tradeMode","tryPermit2","address","minClient","createAndSubmitOrderMut","client","mutationOptions","onSuccess","log","onError","twapOrderCreateAndSubmit","canBatchTxs","isConnectedToSafe","preSignAndSubmitTwapOrder","resetPreSignAndSubmitTwapOrder","viemClient","resetDepositAndSubmitTwapOrder","depositAndSubmitTwapOrder","postingOrder","watchOrderExecution","orderId","id","refetchInterval","onAuctionSuccess","onAuctionFailure","onUpdatedAuction","orderStatus","data","isLoading","isRefetching","orderToCancel","cancelOrderMut","onMutate","cancelOrderResponse","ensureTxReceipt","currentAbortControllerRef","AbortController","usingPriceRef","current","abort","markNonceAsUsed","clearNonce","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","referrerAddress","subscribeToPrice","onTwapOrder","twapSlippage","twapDurationMin","submitTwapOrder","lastPrice","abortController","signal","orderDeadline","orderInterval","durationMin","orderSlippageBps","Math","floor","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","hmac","newPriceResult","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldDepositAndPreSign","shouldDoApprovalTxOrPermit","tryPermit","shouldPreSignBatch","_queryKey","approvedAmount","onData","newPrice","aborted","undefined","BigInt","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","hash","onReplaced","action","transactionHash","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","deadline","value","permit","permitEncodedArgs","failed","twapPriceToUse","destAmount","totalDestAmount","destChainId","bridge","destinationChainId","event","name","params","orderFromAPI","sellOrBuyParams","onChainOrderType","maxSrcAmount","createOrderInput","type","degenMode","orderInput","owner","beneficiary","destToken","deltaPrice","protocolSelector","slippage","interval","depositAmount","getDepositAmount","mutateAsync","signedPermitData","cancelDeltaOrder","twapOrderMut","mutationFn","mutationKey","onSettled","toFixed"],"sources":["../../../../src/hooks/swap/tradeFlow/useTwapFlow.ts"],"sourcesContent":["import { type BridgePrice, type DeltaPrice } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport { type Address, type Hash, type TransactionReceipt } from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { useMinViemClient } from \"@/hooks/useMinViemClient\";\nimport { useWatchDeltaAuction } from \"../prices/delta/queries/useWatchDeltaOrder\";\nimport { getOverallOrderStatus } from \"../prices/delta/orders/utils\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { UserCancelledError } from \"./common/errors\";\nimport { useTwapReceiverAddressValue } from \"@/core/twap/state/twapReceiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport {\n isBridgePrice,\n useSubscribeToDeltaPrice,\n} from \"../prices/delta/queries/useDeltaPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport { shouldApproveOrBatch } from \"./common/usePreSignAndSubmitDeltaOrder\";\nimport { getSwapSideFromDeltaPrice } from \"../prices/delta/orders/utils\";\nimport type { DeltaOrBridgePrice } from \"../prices/types\";\n\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { useCancelOrWithdrawAndCancelDeltaOrder } from \"../prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder\";\nimport type { CancelDeltaOrdersReturn } from \"../prices/delta/mutations/useCancelDeltaOrders\";\nimport { useReferrer } from \"@/hooks/useReferrer\";\n\nimport { useTwapPrices } from \"../prices/useTwapPrices\";\nimport { useTwapSide } from \"@/core/twap/state/twapSideAtom\";\nimport {\n useTwapDuration,\n useTwapSlippage,\n} from \"@/core/twap/state/twapParamsAtom\";\nimport {\n useCreateAndSubmitTwapOrder,\n type CreateAndSubmitTwapOrderInput,\n} from \"../prices/delta/mutations/twap/useCreateTwapOrder\";\nimport type { DeltaAuctionWithTwapOrder } from \"../prices/delta/orders/types\";\nimport type { BuildTWAPSellOrBuySpecificParams } from \"../prices/delta/mutations/types\";\nimport {\n getTwapAmountsFromPrice,\n produceTwapDeadlines,\n} from \"@/lib/utils/twap\";\nimport {\n usePreSignAndSubmitTwapOrder,\n type TwapOrderPreSignResult,\n} from \"../prices/delta/mutations/twap/usePreSignAndSubmitTwapOrder\";\nimport {\n useDepositAndSubmitTwapOrder,\n type TwapOrderDepositResult,\n} from \"../prices/delta/mutations/twap/useDepositAndSubmitTwapOrder\";\nimport { amountAfterSlippage } from \"@/lib/utils/slippage\";\nimport { DEFAULT_DELTA_BRIDGE } from \"../prices/delta/bridge/const\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\nimport { HALF_MINUTE_MS } from \"@/lib/constants/time\";\n\nconst twapOrderFlowType = \"twapOrder\";\n\nexport type UseTwapFlowInput = {\n twapPrice?: DeltaPrice | BridgePrice;\n};\n\nexport type SubmitTwapOrderResult = {\n tradeFlowType: typeof twapOrderFlowType;\n approve: SubmitTxResult;\n twapOrder: {\n sentOrder: DeltaAuctionWithTwapOrder;\n lastOrderState?: DeltaAuctionWithTwapOrder;\n };\n twapPrice: DeltaPrice | BridgePrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunTwapOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\ntype TwapOrderSubmissionResult = {\n order?: DeltaAuctionWithTwapOrder;\n isCreatingOrder: boolean;\n isPostingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n};\n\ntype TwapOrderExecutionResult = {\n sentOrder?: DeltaAuctionWithTwapOrder;\n lastOrderState?: DeltaAuctionWithTwapOrder;\n isOrderPending: boolean;\n isOrderExecuting: boolean;\n isOrderExecuted: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n};\n\ntype TwapOrderCancelationResult = {\n step?: CancelOrderStepKey;\n receipt?: TransactionReceipt;\n txHash?: string;\n response?: CancelDeltaOrdersReturn;\n isCancelingOrder: boolean;\n isOrderCancellable: boolean;\n isOrderCanceled: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n result?: TransactionReceipt | CancelDeltaOrdersReturn;\n error: Error | null;\n};\n\nexport type UseTwapFlowResult = {\n tradeFlowType: typeof twapOrderFlowType;\n chainId: SupportedChainId;\n runTwapOrderFlow: (\n options?: RunTwapOrderOptions\n ) => Promise<SubmitTwapOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunTwapOrderOptions) => Promise<SubmitTwapOrderResult>; // reset and retry flow\n cancelTwapOrder: () => Promise<\n TransactionReceipt | CancelDeltaOrdersReturn | undefined\n >;\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n twapOrderPreSign: TwapOrderPreSignResult;\n twapOrderDeposit: TwapOrderDepositResult;\n // submission represents either normal signing and POSTing of Order or pre-signing (in a tx) and POSTing\n twapOrderSubmission: TwapOrderSubmissionResult;\n twapOrderExecution: TwapOrderExecutionResult;\n twapOrderCancelation: TwapOrderCancelationResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitTwapOrderResult;\n usedPrice?: DeltaPrice | BridgePrice;\n freshPrice?: DeltaPrice | BridgePrice;\n submittedTwapOrder?: DeltaAuctionWithTwapOrder;\n};\n\nconst TWAP_ORDER_MUTATION_KEY = \"runTwapOrderFlow\";\n\nexport function useTwapFlow({\n twapPrice: _twapPrice,\n}: UseTwapFlowInput): UseTwapFlowResult {\n const logger = useLogger(\"TwapFlow\");\n\n const {\n queryKey,\n price,\n chainId,\n refetch,\n totalSrcAmount,\n side: sideFromPrices,\n numSlices,\n priceParams,\n } = useTwapPrices({ enabled: false });\n\n const twapPrice: DeltaOrBridgePrice | undefined = price || _twapPrice;\n\n const twapSideFromInput = useTwapSide();\n\n const twapSide = sideFromPrices || twapSideFromInput;\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\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: twapPrice?.srcToken,\n srcAmount: totalSrcAmount,\n spenderContractType: \"ParaswapDelta\",\n swapSide: twapSide,\n tradeMode: \"twap\",\n chainId,\n tryPermit2: false,\n });\n\n /* 4.1. Build and Submit Twap Order */\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n const createAndSubmitOrderMut = useCreateAndSubmitTwapOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Twap Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create Twap Order error\", error);\n },\n },\n });\n\n const twapOrderCreateAndSubmit: UseTwapFlowResult[\"twapOrderSubmission\"] = {\n order: createAndSubmitOrderMut.order,\n isCreatingOrder: createAndSubmitOrderMut.isCreatingOrder,\n isPostingOrder: createAndSubmitOrderMut.isPostingOrder,\n isOrderSent: createAndSubmitOrderMut.isOrderSent,\n isPending: createAndSubmitOrderMut.isPending,\n isError: createAndSubmitOrderMut.isError,\n isSuccess: createAndSubmitOrderMut.isSuccess,\n error: createAndSubmitOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Twap pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n twapOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitTwapOrder,\n reset: resetPreSignAndSubmitTwapOrder,\n } = usePreSignAndSubmitTwapOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n const {\n twapOrderDeposit,\n reset: resetDepositAndSubmitTwapOrder,\n depositAndSubmitTwapOrder,\n } = useDepositAndSubmitTwapOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Twap Order submission for step 4 */\n const twapOrderSubmission: UseTwapFlowResult[\"twapOrderSubmission\"] = {\n order:\n twapOrderCreateAndSubmit.order ||\n twapOrderPreSign.order ||\n twapOrderDeposit.order,\n isPostingOrder:\n twapOrderCreateAndSubmit.isPostingOrder ||\n twapOrderPreSign.postingOrder.isPostingOrder ||\n twapOrderDeposit.postingOrder.isPostingOrder,\n isCreatingOrder:\n twapOrderCreateAndSubmit.isCreatingOrder ||\n twapOrderPreSign.isCreatingOrder ||\n twapOrderDeposit.isCreatingOrder,\n isOrderSent:\n twapOrderCreateAndSubmit.isOrderSent ||\n twapOrderPreSign.isOrderSent ||\n twapOrderDeposit.isOrderSent,\n isPending:\n twapOrderCreateAndSubmit.isPending ||\n twapOrderPreSign.isPending ||\n twapOrderDeposit.isPending,\n isError:\n twapOrderCreateAndSubmit.isError ||\n twapOrderPreSign.isError ||\n twapOrderDeposit.isError,\n isSuccess:\n twapOrderCreateAndSubmit.isSuccess ||\n twapOrderPreSign.isSuccess ||\n twapOrderDeposit.isSuccess,\n error:\n twapOrderCreateAndSubmit.error ||\n twapOrderPreSign.error ||\n twapOrderDeposit.error,\n };\n\n /* 5. await Order execution */\n\n const watchOrderExecution = useWatchDeltaAuction<DeltaAuctionWithTwapOrder>({\n orderId: twapOrderSubmission.order?.id,\n refetchInterval: HALF_MINUTE_MS,\n onAuctionSuccess: (order) => {\n logger.log(\"Twap Order success\", order);\n },\n onAuctionFailure: (order) => {\n logger.log(\"Twap Order failure\", order);\n },\n onUpdatedAuction: (order) => {\n logger.log(\"Twap Order updated\", order);\n },\n });\n\n const orderStatus = watchOrderExecution.data\n ? getOverallOrderStatus(watchOrderExecution.data)\n : null;\n\n const twapOrderExecution: UseTwapFlowResult[\"twapOrderExecution\"] = {\n sentOrder: twapOrderSubmission.order,\n lastOrderState: watchOrderExecution.data,\n isOrderPending: orderStatus === \"pending\",\n isOrderExecuting: orderStatus === \"executing\",\n isOrderExecuted: orderStatus === \"confirmed\",\n isPending:\n watchOrderExecution.isLoading ||\n watchOrderExecution.isRefetching ||\n orderStatus === \"pending\" ||\n orderStatus === \"executing\",\n isError: watchOrderExecution.isError || orderStatus === \"failed\",\n isSuccess: orderStatus === \"confirmed\",\n error: watchOrderExecution.error,\n };\n\n const orderToCancel =\n twapOrderExecution.lastOrderState || twapOrderExecution.sentOrder;\n\n const cancelOrderMut = useCancelOrWithdrawAndCancelDeltaOrder({\n // supply the must up-to-date order for cancellation\n order: orderToCancel,\n chainId,\n account,\n client: minClient,\n logger,\n mutationOptions: {\n onMutate: () => {\n assert(orderToCancel, \"No order to cancel\");\n return orderToCancel;\n },\n },\n });\n\n const twapOrderCancelation: UseTwapFlowResult[\"twapOrderCancelation\"] = {\n receipt: cancelOrderMut.receipt,\n txHash: cancelOrderMut.txHash,\n response: cancelOrderMut.cancelOrderResponse,\n isCancelingOrder: cancelOrderMut.isPending,\n isOrderCancellable: cancelOrderMut.isOrderCancellable,\n isOrderCanceled: cancelOrderMut.isSuccess,\n isPending: cancelOrderMut.isPending,\n isError: cancelOrderMut.isError,\n isSuccess: cancelOrderMut.isSuccess,\n error: cancelOrderMut.error,\n result: cancelOrderMut.result,\n step: cancelOrderMut.step,\n };\n\n const ensureTxReceipt = useEnsureTxReceipt();\n\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n const usingPriceRef = useRef<DeltaPrice | BridgePrice | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useTwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n const { referrerAddress } = useReferrer();\n\n const subscribeToPrice = useSubscribeToDeltaPrice();\n\n const { onTwapOrder } = useWidgetEvents();\n\n const twapSlippage = useTwapSlippage();\n const twapDurationMin = useTwapDuration();\n\n const submitTwapOrder = async ({\n onTxSent,\n lastPrice,\n }: RunTwapOrderOptions & {\n lastPrice?: DeltaPrice | BridgePrice | null;\n } = {}): Promise<SubmitTwapOrderResult> => {\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 createAndSubmitOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitTwapOrder();\n resetDepositAndSubmitTwapOrder();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and twapPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(twapPrice, \"Twap price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n const { orderDeadline, orderInterval } = produceTwapDeadlines({\n durationMin: twapDurationMin,\n numSlices,\n });\n\n const orderSlippageBps = Math.floor(twapSlippage * 100);\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the synchronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // twapPrice here is the starting price, available before async code and waiting\n let freshPrice = twapPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Twap order, because it failed the last time,\n // but the price hasn't updated yet, so force refetch,\n // comparing raw prices here before mutating to select by bridge preference\n const newPriceResult = await refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldDepositAndPreSign =\n // @TODO [depositNativeAndPreSign] ensureDeltaEthBalance and compare with price.srcAmount to skip the deposit,\n // or deposit the difference between user dETH balance and price.srcAmount to avoid unnecessary deposits\n isETHaddress(freshPrice.srcToken);\n\n /*\n if connected to Safe, or needs to approve a token with a tx, or needs to pre-wrap ETH\n and can batch txs, then pre-sign the batch;\n that way Safe does only one action (wrapETH?+Approve+setPreSignature batch tx)\n and a wallet that would otherwise potentially wrap ETH and then Approve Token (tx, not Permit),\n and then sign Order, basically has to make at least one tx, does only one action as well.\n */\n const { shouldDoApprovalTxOrPermit, tryPermit, shouldPreSignBatch } =\n shouldApproveOrBatch({\n approval,\n signPermit,\n canBatchTxs,\n isConnectedToSafe,\n });\n\n try {\n if (shouldDoApprovalTxOrPermit && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const _queryKey = queryKey;\n\n // should always be available\n if (_queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey: _queryKey,\n onData: (price) => {\n const newPrice: DeltaOrBridgePrice = price;\n\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n const { srcAmount: totalSrcAmount } = getTwapAmountsFromPrice({\n price: newPrice,\n numSlices,\n });\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(totalSrcAmount)) {\n // add this check to resubmit flow\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n try {\n if (!tryPermit) {\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 deadline: BigInt(orderDeadline),\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 // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const twapPriceToUse = freshPrice;\n usingPriceRef.current = twapPriceToUse;\n\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(twapPriceToUse, \"Twap price is not available\");\n const twapSide = getSwapSideFromDeltaPrice(twapPriceToUse);\n const { srcAmount: totalSrcAmount, destAmount: totalDestAmount } =\n getTwapAmountsFromPrice({ price: twapPriceToUse, numSlices });\n\n const permit = signedPermitResult?.permitEncodedArgs;\n\n const destChainId = isBridgePrice(twapPriceToUse)\n ? twapPriceToUse.bridge.destinationChainId\n : chainId;\n\n onTwapOrder?.({\n event: {\n name: \"TwapOrder:request\",\n params: {\n price: twapPriceToUse,\n },\n },\n });\n\n let orderFromAPI: DeltaAuctionWithTwapOrder;\n let sellOrBuyParams: BuildTWAPSellOrBuySpecificParams;\n\n if (twapSide === \"SELL\") {\n sellOrBuyParams = {\n onChainOrderType: \"TWAPOrder\",\n totalSrcAmount,\n // SDK adds destAmountPerSlice internally with slippage applied\n };\n } else {\n sellOrBuyParams = {\n onChainOrderType: \"TWAPBuyOrder\",\n totalDestAmount,\n // SDK applies slippage to maxSrcAmount internally\n maxSrcAmount: totalSrcAmount,\n };\n }\n\n const createOrderInput: CreateAndSubmitTwapOrderInput = {\n signal,\n type: \"MARKET\",\n degenMode: priceParams.degenMode,\n referrerAddress,\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: twapPriceToUse.srcToken,\n destToken: twapPriceToUse.destToken,\n permit,\n destChainId,\n deltaPrice: {\n ...twapPriceToUse,\n bridge: {\n ...twapPriceToUse.bridge,\n // TWAP: pass nullified protocolSelector\n protocolSelector: DEFAULT_DELTA_BRIDGE.protocolSelector,\n // SDK nullifies protocolData internally\n },\n partner,\n },\n\n partner,\n partnerAddress,\n partnerFeeBps,\n partnerTakesSurplus,\n\n deadline: orderDeadline,\n\n // twap specific params\n ...sellOrBuyParams,\n numSlices: numSlices,\n slippage: orderSlippageBps,\n interval: orderInterval,\n },\n };\n\n if (shouldDepositAndPreSign) {\n const depositAmount = getDepositAmount(sellOrBuyParams, twapSlippage);\n // deposit ETH + depositTx + POST order\n orderFromAPI = await depositAndSubmitTwapOrder({\n createOrderInput,\n depositAmount,\n onTxSent,\n });\n } else if (shouldPreSignBatch) {\n // prepare Order for pre-signing and POSTing:\n // 1. builds the order\n // 2. hashes the built order\n // 3. construct DeltaContract.setPreSignature(orderHash, true) tx calldata\n\n orderFromAPI = await preSignAndSubmitTwapOrder({\n createOrderInput,\n approval,\n onTxSent,\n });\n } else {\n // creating signing and POSTing the Order all together in one mutation\n orderFromAPI =\n await createAndSubmitOrderMut.mutateAsync(createOrderInput);\n }\n\n // Order is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n onTwapOrder?.({\n event: {\n name: \"TwapOrder:sent\",\n params: {\n price: twapPriceToUse,\n order: orderFromAPI,\n },\n },\n });\n\n // no use aborting past this point, Order is already being processed\n\n return {\n tradeFlowType: twapOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n twapOrder: {\n sentOrder: orderFromAPI,\n },\n twapPrice: twapPriceToUse,\n account,\n receiverAddress,\n };\n } catch (error) {\n // Order failed, we can't be sure if nonce can be reused or it was incremented in a different Order\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n onTwapOrder?.({\n event: {\n name: \"TwapOrder:failed\",\n params: {\n error: error as Error,\n },\n },\n });\n\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const cancelTwapOrder = async () => {\n try {\n return await cancelOrderMut.cancelDeltaOrder();\n } catch (error) {\n logger.error(\"Cancel Delta order error\", error);\n // allow to re-trigger cancellation after error (like UserCancelledError)\n cancelOrderMut.reset();\n }\n };\n\n const twapOrderMut = useMutation({\n mutationFn: submitTwapOrder,\n mutationKey: [TWAP_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Twap Order success\", data);\n },\n onError: (error) => {\n logger.error(\"Twap Order error\", error);\n },\n onSettled: () => {\n logger.log(\"Twap Order settled\");\n },\n });\n\n const runTwapOrderFlow = twapOrderMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n createAndSubmitOrderMut.reset();\n twapOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitTwapOrder();\n resetDepositAndSubmitTwapOrder();\n };\n\n const retryFlow = (\n options?: RunTwapOrderOptions\n ): Promise<SubmitTwapOrderResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runTwapOrderFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice: typeof twapPrice = usingPriceRef.current || twapPrice;\n\n let result: SubmitTwapOrderResult | undefined = twapOrderMut.data;\n if (result && twapOrderExecution.lastOrderState) {\n result = {\n ...result,\n twapOrder: {\n sentOrder: result.twapOrder.sentOrder,\n // lastOrderState may be CANCELLED here\n lastOrderState: twapOrderExecution.lastOrderState,\n },\n };\n }\n\n /**\n * priority:\n * 1. sentOrder = just sent Order from final result\n * 2. twapOrderExecution.lastOrderState = updated sent Order from watchOrderExecution (intermediate result)\n * 3. twapOrderExecution.sentOrder = just sent Order from watchOrderExecution (intermediate result)\n */\n const submittedTwapOrder: DeltaAuctionWithTwapOrder | undefined =\n result?.twapOrder.sentOrder ||\n twapOrderExecution.lastOrderState ||\n twapOrderExecution.sentOrder;\n\n /* 6. return result */\n return {\n tradeFlowType: twapOrderFlowType,\n chainId,\n runTwapOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelTwapOrder,\n approval,\n signPermit,\n twapOrderPreSign: twapOrderPreSign,\n twapOrderDeposit: twapOrderDeposit,\n twapOrderSubmission,\n twapOrderExecution,\n twapOrderCancelation,\n // twapOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: twapOrderMut.isPending,\n isSuccess: twapOrderSubmission.isSuccess && twapOrderExecution.isSuccess, // approval is an optional step\n isError: twapOrderMut.isError,\n error: twapOrderMut.error,\n result,\n usedPrice,\n freshPrice: twapPrice,\n submittedTwapOrder,\n };\n}\n\nfunction getDepositAmount(\n params: BuildTWAPSellOrBuySpecificParams,\n slippage: number\n) {\n if (\"totalSrcAmount\" in params) {\n return params.totalSrcAmount;\n }\n return amountAfterSlippage(params.maxSrcAmount, slippage, \"BUY\").toFixed(0);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useTwapFlow.js","names":["BridgePrice","DeltaPrice","useAccount","assert","useEnsureTxReceipt","Address","Hash","TransactionReceipt","ApprovalFlowResult","SignPermitFlowResult","SubmitTxResult","useMinViemClient","useWatchDeltaAuction","getOverallOrderStatus","useMutation","useRef","SupportedChainId","UserCancelledError","useTwapReceiverAddressValue","CallsSentObject","TxSentObject","useApproveOrPermit","useMarkPermit1Or2NonceAsUsed","SignedPermitResult","useLogger","isBridgePrice","useSubscribeToDeltaPrice","usePartner","useWidgetEvents","shouldApproveOrBatch","getSwapSideFromDeltaPrice","DeltaOrBridgePrice","isETHaddress","useCancelOrWithdrawAndCancelDeltaOrder","CancelDeltaOrdersReturn","useReferrer","useTwapPrices","useTwapSide","useTwapDuration","useTwapSlippage","useCreateAndSubmitTwapOrder","CreateAndSubmitTwapOrderInput","DeltaAuctionWithTwapOrder","BuildTWAPSellOrBuySpecificParams","getTwapAmountsFromPrice","produceTwapDeadlines","usePreSignAndSubmitTwapOrder","TwapOrderPreSignResult","useDepositAndSubmitTwapOrder","TwapOrderDepositResult","amountAfterSlippage","DEFAULT_DELTA_BRIDGE","CancelOrderStepKey","HALF_MINUTE_MS","twapOrderFlowType","UseTwapFlowInput","twapPrice","SubmitTwapOrderResult","tradeFlowType","approve","twapOrder","sentOrder","lastOrderState","account","receiverAddress","OnTxSent","txSent","RunTwapOrderOptions","onTxSent","TwapOrderSubmissionResult","order","isCreatingOrder","isPostingOrder","isOrderSent","isPending","isError","isSuccess","error","Error","TwapOrderExecutionResult","isOrderPending","isOrderExecuting","isOrderExecuted","TwapOrderCancelationResult","step","receipt","txHash","response","isCancelingOrder","isOrderCancellable","isOrderCanceled","result","UseTwapFlowResult","chainId","runTwapOrderFlow","options","Promise","reset","cancelFlow","retryFlow","cancelTwapOrder","approval","signPermit","twapOrderPreSign","twapOrderDeposit","twapOrderSubmission","twapOrderExecution","twapOrderCancelation","usedPrice","freshPrice","submittedTwapOrder","TWAP_ORDER_MUTATION_KEY","useTwapFlow","_twapPrice","logger","queryKey","price","refetch","totalSrcAmount","side","sideFromPrices","numSlices","priceParams","enabled","twapSideFromInput","twapSide","approveTxMut","signPermitMut","events","approveOrPermitEvents","srcToken","srcAmount","spenderContractType","swapSide","tradeMode","tryPermit2","address","minClient","createAndSubmitOrderMut","client","mutationOptions","onSuccess","log","onError","twapOrderCreateAndSubmit","canBatchTxs","isConnectedToSafe","preSignAndSubmitTwapOrder","resetPreSignAndSubmitTwapOrder","viemClient","resetDepositAndSubmitTwapOrder","depositAndSubmitTwapOrder","postingOrder","watchOrderExecution","orderId","id","refetchInterval","onAuctionSuccess","onAuctionFailure","onUpdatedAuction","orderStatus","data","isLoading","isRefetching","orderToCancel","cancelOrderMut","onMutate","cancelOrderResponse","ensureTxReceipt","currentAbortControllerRef","AbortController","usingPriceRef","current","abort","markNonceAsUsed","clearNonce","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","referrerAddress","subscribeToPrice","onTwapOrder","twapSlippage","twapDurationMin","submitTwapOrder","lastPrice","abortController","signal","orderDeadline","orderInterval","durationMin","orderSlippageBps","Math","floor","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","hmac","newPriceResult","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldDepositAndPreSign","shouldDoApprovalTxOrPermit","tryPermit","shouldPreSignBatch","_queryKey","approvedAmount","onData","newPrice","aborted","undefined","BigInt","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","hash","onReplaced","action","transactionHash","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","deadline","value","permit","permitEncodedArgs","failed","twapPriceToUse","destAmount","totalDestAmount","destChainId","bridge","destinationChainId","event","name","params","orderFromAPI","sellOrBuyParams","onChainOrderType","maxSrcAmount","createOrderInput","type","degenMode","orderInput","owner","beneficiary","destToken","deltaPrice","protocolSelector","slippage","interval","depositAmount","getDepositAmount","mutateAsync","signedPermitData","cancelDeltaOrder","twapOrderMut","mutationFn","mutationKey","onSettled","toFixed"],"sources":["../../../../src/hooks/swap/tradeFlow/useTwapFlow.ts"],"sourcesContent":["import { type BridgePrice, type DeltaPrice } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport { type Address, type Hash, type TransactionReceipt } from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { useMinViemClient } from \"@/hooks/useMinViemClient\";\nimport { useWatchDeltaAuction } from \"../prices/delta/queries/useWatchDeltaOrder\";\nimport { getOverallOrderStatus } from \"../prices/delta/orders/utils\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { UserCancelledError } from \"./common/errors\";\nimport { useTwapReceiverAddressValue } from \"@/core/twap/state/twapReceiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport {\n isBridgePrice,\n useSubscribeToDeltaPrice,\n} from \"../prices/delta/queries/useDeltaPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport { shouldApproveOrBatch } from \"./common/usePreSignAndSubmitDeltaOrder\";\nimport { getSwapSideFromDeltaPrice } from \"../prices/delta/orders/utils\";\nimport type { DeltaOrBridgePrice } from \"../prices/types\";\n\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { useCancelOrWithdrawAndCancelDeltaOrder } from \"../prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder\";\nimport type { CancelDeltaOrdersReturn } from \"../prices/delta/mutations/useCancelDeltaOrders\";\nimport { useReferrer } from \"@/hooks/useReferrer\";\n\nimport { useTwapPrices } from \"../prices/useTwapPrices\";\nimport { useTwapSide } from \"@/core/twap/state/twapSideAtom\";\nimport {\n useTwapDuration,\n useTwapSlippage,\n} from \"@/core/twap/state/twapParamsAtom\";\nimport {\n useCreateAndSubmitTwapOrder,\n type CreateAndSubmitTwapOrderInput,\n} from \"../prices/delta/mutations/twap/useCreateTwapOrder\";\nimport type { DeltaAuctionWithTwapOrder } from \"../prices/delta/orders/types\";\nimport type { BuildTWAPSellOrBuySpecificParams } from \"../prices/delta/mutations/types\";\nimport {\n getTwapAmountsFromPrice,\n produceTwapDeadlines,\n} from \"@/lib/utils/twap\";\nimport {\n usePreSignAndSubmitTwapOrder,\n type TwapOrderPreSignResult,\n} from \"../prices/delta/mutations/twap/usePreSignAndSubmitTwapOrder\";\nimport {\n useDepositAndSubmitTwapOrder,\n type TwapOrderDepositResult,\n} from \"../prices/delta/mutations/twap/useDepositAndSubmitTwapOrder\";\nimport { amountAfterSlippage } from \"@/lib/utils/slippage\";\nimport { DEFAULT_DELTA_BRIDGE } from \"../prices/delta/bridge/const\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\nimport { HALF_MINUTE_MS } from \"@/lib/constants/time\";\n\nconst twapOrderFlowType = \"twapOrder\";\n\nexport type UseTwapFlowInput = {\n twapPrice?: DeltaPrice | BridgePrice;\n};\n\nexport type SubmitTwapOrderResult = {\n tradeFlowType: typeof twapOrderFlowType;\n approve: SubmitTxResult;\n twapOrder: {\n sentOrder: DeltaAuctionWithTwapOrder;\n lastOrderState?: DeltaAuctionWithTwapOrder;\n };\n twapPrice: DeltaPrice | BridgePrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype RunTwapOrderOptions = {\n onTxSent?: OnTxSent;\n};\n\ntype TwapOrderSubmissionResult = {\n order?: DeltaAuctionWithTwapOrder;\n isCreatingOrder: boolean;\n isPostingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n};\n\ntype TwapOrderExecutionResult = {\n sentOrder?: DeltaAuctionWithTwapOrder;\n lastOrderState?: DeltaAuctionWithTwapOrder;\n isOrderPending: boolean;\n isOrderExecuting: boolean;\n isOrderExecuted: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n};\n\ntype TwapOrderCancelationResult = {\n step?: CancelOrderStepKey;\n receipt?: TransactionReceipt;\n txHash?: string;\n response?: CancelDeltaOrdersReturn;\n isCancelingOrder: boolean;\n isOrderCancellable: boolean;\n isOrderCanceled: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n result?: TransactionReceipt | CancelDeltaOrdersReturn;\n error: Error | null;\n};\n\nexport type UseTwapFlowResult = {\n tradeFlowType: typeof twapOrderFlowType;\n chainId: SupportedChainId;\n runTwapOrderFlow: (\n options?: RunTwapOrderOptions\n ) => Promise<SubmitTwapOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunTwapOrderOptions) => Promise<SubmitTwapOrderResult>; // reset and retry flow\n cancelTwapOrder: () => Promise<\n TransactionReceipt | CancelDeltaOrdersReturn | undefined\n >;\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n twapOrderPreSign: TwapOrderPreSignResult;\n twapOrderDeposit: TwapOrderDepositResult;\n // submission represents either normal signing and POSTing of Order or pre-signing (in a tx) and POSTing\n twapOrderSubmission: TwapOrderSubmissionResult;\n twapOrderExecution: TwapOrderExecutionResult;\n twapOrderCancelation: TwapOrderCancelationResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitTwapOrderResult;\n usedPrice?: DeltaPrice | BridgePrice;\n freshPrice?: DeltaPrice | BridgePrice;\n submittedTwapOrder?: DeltaAuctionWithTwapOrder;\n};\n\nconst TWAP_ORDER_MUTATION_KEY = \"runTwapOrderFlow\";\n\nexport function useTwapFlow({\n twapPrice: _twapPrice,\n}: UseTwapFlowInput): UseTwapFlowResult {\n const logger = useLogger(\"TwapFlow\");\n\n const {\n queryKey,\n price,\n chainId,\n refetch,\n totalSrcAmount,\n side: sideFromPrices,\n numSlices,\n priceParams,\n } = useTwapPrices({ enabled: false });\n\n const twapPrice: DeltaOrBridgePrice | undefined = price || _twapPrice;\n\n const twapSideFromInput = useTwapSide();\n\n const twapSide = sideFromPrices || twapSideFromInput;\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\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: twapPrice?.srcToken,\n srcAmount: totalSrcAmount,\n spenderContractType: \"ParaswapDelta\",\n swapSide: twapSide,\n tradeMode: \"twap\",\n chainId,\n tryPermit2: false,\n });\n\n /* 4.1. Build and Submit Twap Order */\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n\n const createAndSubmitOrderMut = useCreateAndSubmitTwapOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Twap Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create Twap Order error\", error);\n },\n },\n });\n\n const twapOrderCreateAndSubmit: UseTwapFlowResult[\"twapOrderSubmission\"] = {\n order: createAndSubmitOrderMut.order,\n isCreatingOrder: createAndSubmitOrderMut.isCreatingOrder,\n isPostingOrder: createAndSubmitOrderMut.isPostingOrder,\n isOrderSent: createAndSubmitOrderMut.isOrderSent,\n isPending: createAndSubmitOrderMut.isPending,\n isError: createAndSubmitOrderMut.isError,\n isSuccess: createAndSubmitOrderMut.isSuccess,\n error: createAndSubmitOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Twap pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n twapOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitTwapOrder,\n reset: resetPreSignAndSubmitTwapOrder,\n } = usePreSignAndSubmitTwapOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n const {\n twapOrderDeposit,\n reset: resetDepositAndSubmitTwapOrder,\n depositAndSubmitTwapOrder,\n } = useDepositAndSubmitTwapOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Twap Order submission for step 4 */\n const twapOrderSubmission: UseTwapFlowResult[\"twapOrderSubmission\"] = {\n order:\n twapOrderCreateAndSubmit.order ||\n twapOrderPreSign.order ||\n twapOrderDeposit.order,\n isPostingOrder:\n twapOrderCreateAndSubmit.isPostingOrder ||\n twapOrderPreSign.postingOrder.isPostingOrder ||\n twapOrderDeposit.postingOrder.isPostingOrder,\n isCreatingOrder:\n twapOrderCreateAndSubmit.isCreatingOrder ||\n twapOrderPreSign.isCreatingOrder ||\n twapOrderDeposit.isCreatingOrder,\n isOrderSent:\n twapOrderCreateAndSubmit.isOrderSent ||\n twapOrderPreSign.isOrderSent ||\n twapOrderDeposit.isOrderSent,\n isPending:\n twapOrderCreateAndSubmit.isPending ||\n twapOrderPreSign.isPending ||\n twapOrderDeposit.isPending,\n isError:\n twapOrderCreateAndSubmit.isError ||\n twapOrderPreSign.isError ||\n twapOrderDeposit.isError,\n isSuccess:\n twapOrderCreateAndSubmit.isSuccess ||\n twapOrderPreSign.isSuccess ||\n twapOrderDeposit.isSuccess,\n error:\n twapOrderCreateAndSubmit.error ||\n twapOrderPreSign.error ||\n twapOrderDeposit.error,\n };\n\n /* 5. await Order execution */\n\n const watchOrderExecution = useWatchDeltaAuction<DeltaAuctionWithTwapOrder>({\n orderId: twapOrderSubmission.order?.id,\n refetchInterval: HALF_MINUTE_MS,\n onAuctionSuccess: (order) => {\n logger.log(\"Twap Order success\", order);\n },\n onAuctionFailure: (order) => {\n logger.log(\"Twap Order failure\", order);\n },\n onUpdatedAuction: (order) => {\n logger.log(\"Twap Order updated\", order);\n },\n });\n\n const orderStatus = watchOrderExecution.data\n ? getOverallOrderStatus(watchOrderExecution.data)\n : null;\n\n const twapOrderExecution: UseTwapFlowResult[\"twapOrderExecution\"] = {\n sentOrder: twapOrderSubmission.order,\n lastOrderState: watchOrderExecution.data,\n isOrderPending: orderStatus === \"pending\",\n isOrderExecuting: orderStatus === \"executing\",\n isOrderExecuted: orderStatus === \"confirmed\",\n isPending:\n watchOrderExecution.isLoading ||\n watchOrderExecution.isRefetching ||\n orderStatus === \"pending\" ||\n orderStatus === \"executing\",\n isError: watchOrderExecution.isError || orderStatus === \"failed\",\n isSuccess: orderStatus === \"confirmed\",\n error: watchOrderExecution.error,\n };\n\n const orderToCancel =\n twapOrderExecution.lastOrderState || twapOrderExecution.sentOrder;\n\n const cancelOrderMut = useCancelOrWithdrawAndCancelDeltaOrder({\n // supply the must up-to-date order for cancellation\n order: orderToCancel,\n chainId,\n account,\n client: minClient,\n logger,\n mutationOptions: {\n onMutate: () => {\n assert(orderToCancel, \"No order to cancel\");\n return orderToCancel;\n },\n },\n });\n\n const twapOrderCancelation: UseTwapFlowResult[\"twapOrderCancelation\"] = {\n receipt: cancelOrderMut.receipt,\n txHash: cancelOrderMut.txHash,\n response: cancelOrderMut.cancelOrderResponse,\n isCancelingOrder: cancelOrderMut.isPending,\n isOrderCancellable: cancelOrderMut.isOrderCancellable,\n isOrderCanceled: cancelOrderMut.isSuccess,\n isPending: cancelOrderMut.isPending,\n isError: cancelOrderMut.isError,\n isSuccess: cancelOrderMut.isSuccess,\n error: cancelOrderMut.error,\n result: cancelOrderMut.result,\n step: cancelOrderMut.step,\n };\n\n const ensureTxReceipt = useEnsureTxReceipt();\n\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n const usingPriceRef = useRef<DeltaPrice | BridgePrice | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useTwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n const { referrerAddress } = useReferrer();\n\n const subscribeToPrice = useSubscribeToDeltaPrice();\n\n const { onTwapOrder } = useWidgetEvents();\n\n const twapSlippage = useTwapSlippage();\n const twapDurationMin = useTwapDuration();\n\n const submitTwapOrder = async ({\n onTxSent,\n lastPrice,\n }: RunTwapOrderOptions & {\n lastPrice?: DeltaPrice | BridgePrice | null;\n } = {}): Promise<SubmitTwapOrderResult> => {\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 createAndSubmitOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitTwapOrder();\n resetDepositAndSubmitTwapOrder();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and twapPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(twapPrice, \"Twap price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n const { orderDeadline, orderInterval } = produceTwapDeadlines({\n durationMin: twapDurationMin,\n numSlices,\n });\n\n const orderSlippageBps = Math.floor(twapSlippage * 100);\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the synchronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // twapPrice here is the starting price, available before async code and waiting\n let freshPrice = twapPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Twap order, because it failed the last time,\n // but the price hasn't updated yet, so force refetch,\n // comparing raw prices here before mutating to select by bridge preference\n const newPriceResult = await refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldDepositAndPreSign =\n // @TODO [depositNativeAndPreSign] ensureDeltaEthBalance and compare with price.srcAmount to skip the deposit,\n // or deposit the difference between user dETH balance and price.srcAmount to avoid unnecessary deposits\n isETHaddress(freshPrice.srcToken);\n\n /*\n if connected to Safe, or needs to approve a token with a tx, or needs to pre-wrap ETH\n and can batch txs, then pre-sign the batch;\n that way Safe does only one action (wrapETH?+Approve+setPreSignature batch tx)\n and a wallet that would otherwise potentially wrap ETH and then Approve Token (tx, not Permit),\n and then sign Order, basically has to make at least one tx, does only one action as well.\n */\n const { shouldDoApprovalTxOrPermit, tryPermit, shouldPreSignBatch } =\n shouldApproveOrBatch({\n approval,\n signPermit,\n canBatchTxs,\n isConnectedToSafe,\n });\n\n try {\n if (shouldDoApprovalTxOrPermit && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const _queryKey = queryKey;\n\n // should always be available\n if (_queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey: _queryKey,\n onData: (price) => {\n const newPrice: DeltaOrBridgePrice = price;\n\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n const { srcAmount: totalSrcAmount } = getTwapAmountsFromPrice({\n price: newPrice,\n numSlices,\n });\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(totalSrcAmount)) {\n // add this check to resubmit flow\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n try {\n if (!tryPermit) {\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 deadline: BigInt(orderDeadline),\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 // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const twapPriceToUse = freshPrice;\n usingPriceRef.current = twapPriceToUse;\n\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(twapPriceToUse, \"Twap price is not available\");\n const twapSide = getSwapSideFromDeltaPrice(twapPriceToUse);\n const { srcAmount: totalSrcAmount, destAmount: totalDestAmount } =\n getTwapAmountsFromPrice({ price: twapPriceToUse, numSlices });\n\n const permit = signedPermitResult?.permitEncodedArgs;\n\n const destChainId = isBridgePrice(twapPriceToUse)\n ? twapPriceToUse.bridge.destinationChainId\n : chainId;\n\n onTwapOrder?.({\n event: {\n name: \"TwapOrder:request\",\n params: {\n price: twapPriceToUse,\n },\n },\n });\n\n let orderFromAPI: DeltaAuctionWithTwapOrder;\n let sellOrBuyParams: BuildTWAPSellOrBuySpecificParams;\n\n if (twapSide === \"SELL\") {\n sellOrBuyParams = {\n onChainOrderType: \"TWAPOrder\",\n totalSrcAmount,\n // SDK adds destAmountPerSlice internally with slippage applied\n };\n } else {\n sellOrBuyParams = {\n onChainOrderType: \"TWAPBuyOrder\",\n totalDestAmount,\n // SDK applies slippage to maxSrcAmount internally\n maxSrcAmount: totalSrcAmount,\n };\n }\n\n const createOrderInput: CreateAndSubmitTwapOrderInput = {\n signal,\n type: \"MARKET\",\n degenMode: priceParams.degenMode,\n referrerAddress,\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: twapPriceToUse.srcToken,\n destToken: twapPriceToUse.destToken,\n permit,\n destChainId,\n deltaPrice: {\n ...twapPriceToUse,\n bridge: {\n ...twapPriceToUse.bridge,\n // TWAP: pass nullified protocolSelector\n protocolSelector: DEFAULT_DELTA_BRIDGE.protocolSelector,\n // SDK nullifies protocolData internally\n },\n partner,\n },\n\n partner,\n partnerAddress,\n partnerFeeBps,\n partnerTakesSurplus,\n\n deadline: orderDeadline,\n\n // twap specific params\n ...sellOrBuyParams,\n numSlices: numSlices,\n slippage: orderSlippageBps,\n interval: orderInterval,\n },\n };\n\n if (shouldDepositAndPreSign) {\n const depositAmount = getDepositAmount(sellOrBuyParams, twapSlippage);\n // deposit ETH + depositTx + POST order\n orderFromAPI = await depositAndSubmitTwapOrder({\n createOrderInput,\n depositAmount,\n onTxSent,\n });\n } else if (shouldPreSignBatch) {\n // prepare Order for pre-signing and POSTing:\n // 1. builds the order\n // 2. hashes the built order\n // 3. construct DeltaContract.setPreSignature(orderHash, true) tx calldata\n\n orderFromAPI = await preSignAndSubmitTwapOrder({\n createOrderInput,\n approval,\n onTxSent,\n });\n } else {\n // creating signing and POSTing the Order all together in one mutation\n orderFromAPI =\n await createAndSubmitOrderMut.mutateAsync(createOrderInput);\n }\n\n // Order is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n onTwapOrder?.({\n event: {\n name: \"TwapOrder:sent\",\n params: {\n price: twapPriceToUse,\n order: orderFromAPI,\n },\n },\n });\n\n // no use aborting past this point, Order is already being processed\n\n return {\n tradeFlowType: twapOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n twapOrder: {\n sentOrder: orderFromAPI,\n },\n twapPrice: twapPriceToUse,\n account,\n receiverAddress,\n };\n } catch (error) {\n // Order failed, we can't be sure if nonce can be reused or it was incremented in a different Order\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n onTwapOrder?.({\n event: {\n name: \"TwapOrder:failed\",\n params: {\n error: error as Error,\n },\n },\n });\n\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const cancelTwapOrder = async () => {\n try {\n return await cancelOrderMut.cancelDeltaOrder();\n } catch (error) {\n logger.error(\"Cancel Delta order error\", error);\n // allow to re-trigger cancellation after error (like UserCancelledError)\n cancelOrderMut.reset();\n }\n };\n\n const twapOrderMut = useMutation({\n mutationFn: submitTwapOrder,\n mutationKey: [TWAP_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Twap Order success\", data);\n },\n onError: (error) => {\n logger.error(\"Twap Order error\", error);\n },\n onSettled: () => {\n logger.log(\"Twap Order settled\");\n },\n });\n\n const runTwapOrderFlow = twapOrderMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n createAndSubmitOrderMut.reset();\n twapOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitTwapOrder();\n resetDepositAndSubmitTwapOrder();\n };\n\n const retryFlow = (\n options?: RunTwapOrderOptions\n ): Promise<SubmitTwapOrderResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runTwapOrderFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice: typeof twapPrice = usingPriceRef.current || twapPrice;\n\n let result: SubmitTwapOrderResult | undefined = twapOrderMut.data;\n if (result && twapOrderExecution.lastOrderState) {\n result = {\n ...result,\n twapOrder: {\n sentOrder: result.twapOrder.sentOrder,\n // lastOrderState may be CANCELLED here\n lastOrderState: twapOrderExecution.lastOrderState,\n },\n };\n }\n\n /**\n * priority:\n * 1. sentOrder = just sent Order from final result\n * 2. twapOrderExecution.lastOrderState = updated sent Order from watchOrderExecution (intermediate result)\n * 3. twapOrderExecution.sentOrder = just sent Order from watchOrderExecution (intermediate result)\n */\n const submittedTwapOrder: DeltaAuctionWithTwapOrder | undefined =\n result?.twapOrder.sentOrder ||\n twapOrderExecution.lastOrderState ||\n twapOrderExecution.sentOrder;\n\n /* 6. return result */\n return {\n tradeFlowType: twapOrderFlowType,\n chainId,\n runTwapOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelTwapOrder,\n approval,\n signPermit,\n twapOrderPreSign: twapOrderPreSign,\n twapOrderDeposit: twapOrderDeposit,\n twapOrderSubmission,\n twapOrderExecution,\n twapOrderCancelation,\n // twapOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: twapOrderMut.isPending,\n isSuccess: twapOrderSubmission.isSuccess && twapOrderExecution.isSuccess, // approval is an optional step\n isError: twapOrderMut.isError,\n error: twapOrderMut.error,\n result,\n usedPrice,\n freshPrice: twapPrice,\n submittedTwapOrder,\n };\n}\n\nfunction getDepositAmount(\n params: BuildTWAPSellOrBuySpecificParams,\n slippage: number\n) {\n if (\"totalSrcAmount\" in params) {\n return params.totalSrcAmount;\n }\n return amountAfterSlippage(params.maxSrcAmount, slippage, \"BUY\").toFixed(0);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTwapSwapStep.js","names":["CancelOrderStepKey","NonFlowStep","TwapOrderStep","TwapOrderStepKey","useTwapFlow","SubmitTwapOrderResult","UseTwapFlowInput","UseTwapFlowResult","useLogger","constructExplorerOrderDetailsLink","isUserCancelledError","useState","UseTwapSwapStepResult","startTwapSwap","cancelTwapOrder","reset","cancelFlow","retryFlow","goToBeforeSwap","isFlowCancellable","isOrderCancellable","step","orderCancellationStep","isNonFlowStep","explorerLink","error","Error","erroredStep","result","usedPrice","submittedTwapOrder","tradeFlowType","useTwapSwapStep","options","$","_c","logger","twapFlow","runTwapOrderFlow","permitSigningHappeningOrNeverHappened","signPermit","isPending","isPermitSigned","approvalHappeningOrNeverHappened","approval","isSuccess","willUsePermit","needsApproval","isPermitSupported","isPermitReadyToSign","permitOrApprovalHappeningOrNeverHappened","twapOrderSubmission","permitOrApprovalHappened","txHash","signature","approvalIsStarted","key","subStep","isTxPending","isOrderBeingSigned","isPostingOrder","twapOrderCancelation","orderId","order","id","undefined","nonFlowStep","setNonFlowStep","t0","Symbol","for","t1","resetStepOverride","once","log","t2","isError","t3","freshPrice","resultProps","t4","options_0","t5","t6","t7","t8","options_1","t9"],"sources":["../../../../src/hooks/swap/tradeFlow/useTwapSwapStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n NonFlowStep,\n TwapOrderStep,\n TwapOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useTwapFlow,\n type SubmitTwapOrderResult,\n type UseTwapFlowInput,\n type UseTwapFlowResult,\n} from \"./useTwapFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { constructExplorerOrderDetailsLink } from \"@/lib/utils/explorer\";\nimport { isUserCancelledError } from \"./common/errors\";\nimport { useState } from \"react\";\n\ntype UseTwapSwapStepResult = {\n startTwapSwap: UseTwapFlowResult[\"runTwapOrderFlow\"];\n cancelTwapOrder: UseTwapFlowResult[\"cancelTwapOrder\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseTwapFlowResult[\"reset\"];\n cancelFlow: UseTwapFlowResult[\"cancelFlow\"];\n retryFlow: UseTwapFlowResult[\"retryFlow\"];\n goToBeforeSwap: () => void;\n isFlowCancellable: boolean;\n isOrderCancellable: boolean;\n step?: TwapOrderStep;\n orderCancellationStep?: CancelOrderStepKey;\n isNonFlowStep: boolean;\n explorerLink?: string;\n error: Error | null;\n erroredStep?: TwapOrderStepKey;\n result?: SubmitTwapOrderResult;\n usedPrice: UseTwapFlowResult[\"usedPrice\"];\n submittedTwapOrder?: UseTwapFlowResult[\"submittedTwapOrder\"];\n tradeFlowType: UseTwapFlowResult[\"tradeFlowType\"];\n};\n\nexport function useTwapSwapStep(\n options: UseTwapFlowInput\n): UseTwapSwapStepResult {\n const logger = useLogger(\"TwapSwapStep\");\n const twapFlow = useTwapFlow(options);\n\n const startTwapSwap = twapFlow.runTwapOrderFlow;\n const cancelTwapOrder = twapFlow.cancelTwapOrder;\n const reset = twapFlow.reset;\n const cancelFlow = twapFlow.cancelFlow;\n const retryFlow = twapFlow.retryFlow;\n\n let step: TwapOrderStep | 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 twapFlow.signPermit.isPending || !twapFlow.signPermit.isPermitSigned;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n twapFlow.approval.isPending || !twapFlow.approval.isSuccess;\n\n const willUsePermit =\n twapFlow.approval.needsApproval &&\n twapFlow.signPermit.isPermitSupported &&\n twapFlow.signPermit.isPermitReadyToSign;\n\n const permitOrApprovalHappeningOrNeverHappened = willUsePermit\n ? permitSigningHappeningOrNeverHappened\n : approvalHappeningOrNeverHappened;\n\n if (\n twapFlow.approval.needsApproval &&\n permitOrApprovalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (twapFlow.twapOrderSubmission.isPending) {\n const permitOrApprovalHappened = !!(\n twapFlow.approval.txHash || twapFlow.signPermit.signature\n );\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (twapFlow.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 twapFlow.approval.isTxPending;\n\n const isOrderBeingSigned =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const isPostingOrder = twapFlow.twapOrderSubmission.isPostingOrder;\n\n const isFlowCancellable =\n // final Order is not yet submitted, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n (approvalIsStarted || isOrderBeingSigned) && !isPostingOrder;\n\n const isOrderCancellable = twapFlow.twapOrderCancelation.isOrderCancellable;\n\n const orderId = twapFlow.twapOrderSubmission.order?.id;\n const explorerLink = orderId\n ? constructExplorerOrderDetailsLink(orderId)\n : undefined;\n\n const [nonFlowStep, setNonFlowStep] = useState<NonFlowStep | null>(null);\n const goToBeforeSwap = () => {\n setNonFlowStep({ key: \"prepare-swap\" });\n };\n const resetStepOverride = () => {\n setNonFlowStep(null);\n };\n\n step = nonFlowStep || step;\n const isNonFlowStep = !!nonFlowStep;\n\n logger.once.log(\"step\", step, twapFlow, {\n isFlowCancellable,\n explorerLink,\n orderId,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(twapFlow.error) ? null : twapFlow.error;\n\n let erroredStep: TwapOrderStepKey | undefined;\n\n if (twapFlow.isError) {\n if (twapFlow.approval.isError || twapFlow.signPermit.isError) {\n erroredStep = \"signature\";\n } else if (twapFlow.twapOrderSubmission.isError) {\n erroredStep = \"order-submission\";\n }\n }\n\n const resultProps: Pick<\n UseTwapSwapStepResult,\n | \"usedPrice\"\n | \"isFlowCancellable\"\n | \"isOrderCancellable\"\n | \"error\"\n | \"erroredStep\"\n | \"result\"\n | \"submittedTwapOrder\"\n | \"explorerLink\"\n > = isNonFlowStep\n ? {\n // don't return previous data when in non-flow step\n usedPrice: twapFlow.freshPrice,\n isFlowCancellable: false,\n isOrderCancellable: false,\n error: null,\n }\n : {\n result: twapFlow.result,\n usedPrice: twapFlow.usedPrice,\n submittedTwapOrder: twapFlow.submittedTwapOrder, // submitted or updated Twap Order\n erroredStep,\n error,\n isFlowCancellable,\n isOrderCancellable,\n explorerLink,\n };\n\n return {\n startTwapSwap: (options) => {\n resetStepOverride();\n return startTwapSwap(options);\n },\n cancelTwapOrder: () => {\n resetStepOverride();\n return cancelTwapOrder();\n },\n reset: () => {\n resetStepOverride();\n return reset();\n },\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 resetStepOverride();\n return cancelFlow();\n },\n retryFlow: (options) => {\n resetStepOverride();\n return retryFlow(options);\n },\n goToBeforeSwap,\n step,\n orderCancellationStep: twapFlow.twapOrderCancelation.step,\n isNonFlowStep,\n ...resultProps,\n tradeFlowType: twapFlow.tradeFlowType,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"useTwapSwapStep.js","names":["CancelOrderStepKey","NonFlowStep","TwapOrderStep","TwapOrderStepKey","useTwapFlow","SubmitTwapOrderResult","UseTwapFlowInput","UseTwapFlowResult","useLogger","constructExplorerOrderDetailsLink","isUserCancelledError","useState","UseTwapSwapStepResult","startTwapSwap","cancelTwapOrder","reset","cancelFlow","retryFlow","goToBeforeSwap","isFlowCancellable","isOrderCancellable","step","orderCancellationStep","isNonFlowStep","explorerLink","error","Error","erroredStep","result","usedPrice","submittedTwapOrder","tradeFlowType","useTwapSwapStep","options","$","_c","logger","twapFlow","runTwapOrderFlow","permitSigningHappeningOrNeverHappened","signPermit","isPending","isPermitSigned","approvalHappeningOrNeverHappened","approval","isSuccess","willUsePermit","needsApproval","isPermitSupported","isPermitReadyToSign","permitOrApprovalHappeningOrNeverHappened","twapOrderSubmission","permitOrApprovalHappened","txHash","signature","approvalIsStarted","key","subStep","isTxPending","isOrderBeingSigned","isPostingOrder","twapOrderCancelation","orderId","order","id","undefined","nonFlowStep","setNonFlowStep","t0","Symbol","for","t1","resetStepOverride","once","log","t2","isError","t3","freshPrice","resultProps","t4","options_0","t5","t6","t7","t8","options_1","t9"],"sources":["../../../../src/hooks/swap/tradeFlow/useTwapSwapStep.ts"],"sourcesContent":["import type {\n CancelOrderStepKey,\n NonFlowStep,\n TwapOrderStep,\n TwapOrderStepKey,\n} from \"@/components/widget/TradeOverview/steps\";\nimport {\n useTwapFlow,\n type SubmitTwapOrderResult,\n type UseTwapFlowInput,\n type UseTwapFlowResult,\n} from \"./useTwapFlow\";\nimport { useLogger } from \"@/core/logger\";\nimport { constructExplorerOrderDetailsLink } from \"@/lib/utils/explorer\";\nimport { isUserCancelledError } from \"./common/errors\";\nimport { useState } from \"react\";\n\ntype UseTwapSwapStepResult = {\n startTwapSwap: UseTwapFlowResult[\"runTwapOrderFlow\"];\n cancelTwapOrder: UseTwapFlowResult[\"cancelTwapOrder\"];\n // @TODO check if resetting is necessary on error, maybe not if submit on click works as a reset\n reset: UseTwapFlowResult[\"reset\"];\n cancelFlow: UseTwapFlowResult[\"cancelFlow\"];\n retryFlow: UseTwapFlowResult[\"retryFlow\"];\n goToBeforeSwap: () => void;\n isFlowCancellable: boolean;\n isOrderCancellable: boolean;\n step?: TwapOrderStep;\n orderCancellationStep?: CancelOrderStepKey;\n isNonFlowStep: boolean;\n explorerLink?: string;\n error: Error | null;\n erroredStep?: TwapOrderStepKey;\n result?: SubmitTwapOrderResult;\n usedPrice: UseTwapFlowResult[\"usedPrice\"];\n submittedTwapOrder?: UseTwapFlowResult[\"submittedTwapOrder\"];\n tradeFlowType: UseTwapFlowResult[\"tradeFlowType\"];\n};\n\nexport function useTwapSwapStep(\n options: UseTwapFlowInput\n): UseTwapSwapStepResult {\n const logger = useLogger(\"TwapSwapStep\");\n const twapFlow = useTwapFlow(options);\n\n const startTwapSwap = twapFlow.runTwapOrderFlow;\n const cancelTwapOrder = twapFlow.cancelTwapOrder;\n const reset = twapFlow.reset;\n const cancelFlow = twapFlow.cancelFlow;\n const retryFlow = twapFlow.retryFlow;\n\n let step: TwapOrderStep | 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 twapFlow.signPermit.isPending || !twapFlow.signPermit.isPermitSigned;\n\n const approvalHappeningOrNeverHappened =\n // isPending starts as false,\n // needsApproval && !isSuccess allows to detect approve step right away even then\n twapFlow.approval.isPending || !twapFlow.approval.isSuccess;\n\n const willUsePermit =\n twapFlow.approval.needsApproval &&\n twapFlow.signPermit.isPermitSupported &&\n twapFlow.signPermit.isPermitReadyToSign;\n\n const permitOrApprovalHappeningOrNeverHappened = willUsePermit\n ? permitSigningHappeningOrNeverHappened\n : approvalHappeningOrNeverHappened;\n\n if (\n twapFlow.approval.needsApproval &&\n permitOrApprovalHappeningOrNeverHappened\n ) {\n step = { key: \"signature\", subStep: \"approval-signature\" };\n } else if (twapFlow.twapOrderSubmission.isPending) {\n const permitOrApprovalHappened = !!(\n twapFlow.approval.txHash || twapFlow.signPermit.signature\n );\n\n step = {\n key: \"signature\",\n subStep: permitOrApprovalHappened\n ? \"order-signature\"\n : \"standalone-order-signature\",\n };\n } else if (twapFlow.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 twapFlow.approval.isTxPending;\n\n const isOrderBeingSigned =\n step?.key === \"signature\" &&\n (step.subStep === \"order-signature\" ||\n step.subStep === \"standalone-order-signature\");\n\n const isPostingOrder = twapFlow.twapOrderSubmission.isPostingOrder;\n\n const isFlowCancellable =\n // final Order is not yet submitted, there's something to cancel;\n // but some steps are already started so we can't simply dismiss\n (approvalIsStarted || isOrderBeingSigned) && !isPostingOrder;\n\n const isOrderCancellable = twapFlow.twapOrderCancelation.isOrderCancellable;\n\n const orderId = twapFlow.twapOrderSubmission.order?.id;\n const explorerLink = orderId\n ? constructExplorerOrderDetailsLink(orderId)\n : undefined;\n\n const [nonFlowStep, setNonFlowStep] = useState<NonFlowStep | null>(null);\n const goToBeforeSwap = () => {\n setNonFlowStep({ key: \"prepare-swap\" });\n };\n const resetStepOverride = () => {\n setNonFlowStep(null);\n };\n\n step = nonFlowStep || step;\n const isNonFlowStep = !!nonFlowStep;\n\n logger.once.log(\"step\", step, twapFlow, {\n isFlowCancellable,\n explorerLink,\n orderId,\n });\n\n // intentional cancellation is handled separately\n const error = isUserCancelledError(twapFlow.error) ? null : twapFlow.error;\n\n let erroredStep: TwapOrderStepKey | undefined;\n\n if (twapFlow.isError) {\n if (twapFlow.approval.isError || twapFlow.signPermit.isError) {\n erroredStep = \"signature\";\n } else if (twapFlow.twapOrderSubmission.isError) {\n erroredStep = \"order-submission\";\n }\n }\n\n const resultProps: Pick<\n UseTwapSwapStepResult,\n | \"usedPrice\"\n | \"isFlowCancellable\"\n | \"isOrderCancellable\"\n | \"error\"\n | \"erroredStep\"\n | \"result\"\n | \"submittedTwapOrder\"\n | \"explorerLink\"\n > = isNonFlowStep\n ? {\n // don't return previous data when in non-flow step\n usedPrice: twapFlow.freshPrice,\n isFlowCancellable: false,\n isOrderCancellable: false,\n error: null,\n }\n : {\n result: twapFlow.result,\n usedPrice: twapFlow.usedPrice,\n submittedTwapOrder: twapFlow.submittedTwapOrder, // submitted or updated Twap Order\n erroredStep,\n error,\n isFlowCancellable,\n isOrderCancellable,\n explorerLink,\n };\n\n return {\n startTwapSwap: (options) => {\n resetStepOverride();\n return startTwapSwap(options);\n },\n cancelTwapOrder: () => {\n resetStepOverride();\n return cancelTwapOrder();\n },\n reset: () => {\n resetStepOverride();\n return reset();\n },\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 resetStepOverride();\n return cancelFlow();\n },\n retryFlow: (options) => {\n resetStepOverride();\n return retryFlow(options);\n },\n goToBeforeSwap,\n step,\n orderCancellationStep: twapFlow.twapOrderCancelation.step,\n isNonFlowStep,\n ...resultProps,\n tradeFlowType: twapFlow.tradeFlowType,\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGenericTokenAllowance.js","names":["useTokenAllowance","formatUnits","Address","useSpender","useAccount","toDecimal","useMemo","isETH","AllowanceData","GenericTokenAllowance","GenericTokenAllowanceMin","UseGenericTokenAllowanceInput","UseGenericTokenAllowanceMinInput","useGenericTokenAllowance","token","amountToApproveInWei","spenderContractType","isConnected","spender","isLoading","isLoadingSpender","data","allowance","isLoadingAllowance","tokenAddress","address","allowanceOnChain","tokenDoesntRequireAllowance","needsApproval","enoughAllowance","calcAllowanceData","BigInt","tokenDecimals","decimals","isLoadingPrerequisites","chainId","network","useGenericTokenAllowanceMin","queryKey","amountToApproveInWeiBigInt","differenceLeftToApprove","allowanceToSet","amountToApproveUnits","allowanceToSetHumanReadable","Number","differenceLeftToApproveUnits","differenceLeftToApproveHumanReadable"],"sources":["../../../../src/hooks/tokens/allowance/useGenericTokenAllowance.ts"],"sourcesContent":["import { useTokenAllowance } from \"./useTokenAllowance\";\nimport { formatUnits, type Address } from \"viem\";\nimport { useSpender } from \"@/hooks/sdk/useSpender\";\n\nimport { useAccount } from \"wagmi\";\nimport { toDecimal } from \"@/lib/utils/toDecimal\";\nimport { useMemo } from \"react\";\nimport { isETH } from \"@/tokens/utils/eth\";\nimport type {\n AllowanceData,\n GenericTokenAllowance,\n GenericTokenAllowanceMin,\n UseGenericTokenAllowanceInput,\n UseGenericTokenAllowanceMinInput,\n} from \"./types\";\n\nexport const useGenericTokenAllowance = ({\n token,\n amountToApproveInWei = 0n,\n spenderContractType,\n}: UseGenericTokenAllowanceInput = {}): GenericTokenAllowance => {\n const { isConnected } = useAccount();\n\n const { spender, isLoading: isLoadingSpender } =\n useSpender(spenderContractType);\n\n const { data: allowance, isLoading: isLoadingAllowance } = useTokenAllowance({\n tokenAddress: token?.address,\n spender,\n });\n\n const allowanceOnChain = useMemo(() => {\n const tokenDoesntRequireAllowance = !token || isETH(token) || !isConnected;\n\n if (tokenDoesntRequireAllowance) {\n return {\n needsApproval: false,\n enoughAllowance: true,\n };\n }\n\n return calcAllowanceData({\n allowance: allowance || 0n,\n amountToApproveInWei: BigInt(amountToApproveInWei), // ok to cast wei\n tokenDecimals: token?.decimals,\n });\n }, [allowance, amountToApproveInWei, isConnected, token]);\n\n const isLoadingPrerequisites =\n isConnected && (isLoadingSpender || isLoadingAllowance);\n\n return {\n token: token?.address as Address | undefined,\n chainId: token?.network,\n allowance,\n isLoadingPrerequisites,\n spender: spender as Address | undefined,\n ...allowanceOnChain,\n };\n};\n\n// exclusively deals with wei\nexport const useGenericTokenAllowanceMin = ({\n tokenAddress,\n amountToApproveInWei = 0n,\n spenderContractType,\n chainId,\n}: UseGenericTokenAllowanceMinInput = {}): GenericTokenAllowanceMin => {\n const { isConnected } = useAccount();\n\n const { spender, isLoading: isLoadingSpender } =\n useSpender(spenderContractType);\n\n const {\n data: allowance,\n isLoading: isLoadingAllowance,\n queryKey,\n } = useTokenAllowance({\n tokenAddress,\n spender,\n chainId,\n });\n\n const allowanceOnChain = useMemo(() => {\n const tokenDoesntRequireAllowance =\n !tokenAddress || isETH({ address: tokenAddress }) || !isConnected;\n\n if (tokenDoesntRequireAllowance) {\n return {\n needsApproval: false,\n enoughAllowance: true,\n };\n }\n\n const amountToApproveInWeiBigInt = BigInt(amountToApproveInWei);\n\n const enoughAllowance =\n !!allowance && allowance >= amountToApproveInWeiBigInt;\n const needsApproval = !enoughAllowance;\n\n if (!needsApproval) {\n return {\n needsApproval: false,\n enoughAllowance,\n };\n }\n\n const differenceLeftToApprove =\n amountToApproveInWeiBigInt - (allowance || 0n);\n\n return {\n needsApproval,\n enoughAllowance,\n allowance,\n allowanceToSet: amountToApproveInWeiBigInt,\n differenceLeftToApprove,\n };\n }, [allowance, amountToApproveInWei, isConnected, tokenAddress]);\n\n const isLoadingPrerequisites =\n isConnected && (isLoadingSpender || isLoadingAllowance);\n\n return {\n allowance,\n isLoadingPrerequisites,\n spender: spender as Address | undefined,\n token: tokenAddress as Address | undefined,\n ...allowanceOnChain,\n queryKey,\n };\n};\n\nfunction calcAllowanceData({\n allowance,\n amountToApproveInWei,\n tokenDecimals,\n}: {\n allowance: bigint;\n amountToApproveInWei: bigint;\n tokenDecimals: number;\n}): AllowanceData {\n const enoughAllowance = allowance >= amountToApproveInWei;\n\n const needsApproval = !enoughAllowance;\n\n if (!needsApproval) {\n return {\n needsApproval: false,\n enoughAllowance,\n };\n }\n\n const differenceLeftToApprove = amountToApproveInWei - allowance;\n\n const amountToApproveUnits = formatUnits(amountToApproveInWei, tokenDecimals);\n const allowanceToSetHumanReadable = toDecimal(Number(amountToApproveUnits));\n\n const differenceLeftToApproveUnits = formatUnits(\n differenceLeftToApprove,\n tokenDecimals\n );\n const differenceLeftToApproveHumanReadable = toDecimal(\n Number(differenceLeftToApproveUnits)\n );\n\n return {\n needsApproval,\n enoughAllowance,\n allowance,\n allowanceToSet: amountToApproveInWei,\n allowanceToSetHumanReadable,\n differenceLeftToApprove,\n differenceLeftToApproveHumanReadable,\n };\n}\n"],"mappings":";;;;;;;;AAgBA,IAAaa,KAA4B,EACvCC,UACAC,0BAAuB,IACvBC,2BACiC,EAAE,KAA4B;CAC/D,IAAM,EAAEC,mBAAgBb,GAAY,EAE9B,EAAEc,YAASC,WAAWC,MAC1BjB,EAAWa,EAAoB,EAE3B,EAAEK,MAAMC,GAAWH,WAAWI,MAAuBvB,EAAkB;EAC3EwB,cAAcV,GAAOW;EACrBP;EACD,CAAC,EAEIQ,IAAmBpB,QACa,CAACQ,KAASP,EAAMO,EAAM,IAAI,CAACG,IAGtD;EACLW,eAAe;EACfC,iBAAiB;EAClB,GAGIC,EAAkB;EACvBR,WAAWA,KAAa;EACxBP,sBAAsBgB,OAAOhB,EAAqB;EAClDiB,eAAelB,GAAOmB;EACvB,CAAC,EACD;EAACX;EAAWP;EAAsBE;EAAaH;EAAM,CAAC,EAEnDoB,IACJjB,MAAgBG,KAAoBG;AAEtC,QAAO;EACLT,OAAOA,GAAOW;EACdU,SAASrB,GAAOsB;EAChBd;EACAY;EACShB;EACT,GAAGQ;EACJ;GAIUW,KAA+B,EAC1Cb,iBACAT,0BAAuB,IACvBC,wBACAmB,eACoC,EAAE,KAA+B;CACrE,IAAM,EAAElB,mBAAgBb,GAAY,EAE9B,EAAEc,YAASC,WAAWC,MAC1BjB,EAAWa,EAAoB,EAE3B,EACJK,MAAMC,GACNH,WAAWI,GACXe,gBACEtC,EAAkB;EACpBwB;EACAN;EACAiB;EACD,CAAC,EAEIT,IAAmBpB,QAAc;AAIrC,MAFE,CAACkB,KAAgBjB,EAAM,EAAEkB,SAASD,GAAc,CAAC,IAAI,CAACP,EAGtD,QAAO;GACLW,eAAe;GACfC,iBAAiB;GAClB;EAGH,IAAMU,IAA6BR,OAAOhB,EAAqB,EAEzDc,IACJ,CAAC,CAACP,KAAaA,KAAaiB,GACxBX,IAAgB,CAACC;AAYvB,SAVKD,IAUE;GACLA;GACAC;GACAP;GACAmB,gBAAgBF;GAChBC,yBAPAD,KAA8BjB,KAAa;GAQ5C,GAfQ;GACLM,eAAe;GACfC;GACD;IAaF;EAACP;EAAWP;EAAsBE;EAAaO;EAAa,CAAC;AAKhE,QAAO;EACLF;EACAY,wBAJAjB,MAAgBG,KAAoBG;EAK3BL;EACTJ,OAAOU;EACP,GAAGE;EACHY;EACD;;AAGH,SAASR,EAAkB,EACzBR,cACAP,yBACAiB,oBAKgB;CAChB,IAAMH,IAAkBP,KAAaP,GAE/Ba,IAAgB,CAACC;AAEvB,KAAI,CAACD,EACH,QAAO;EACLA,eAAe;EACfC;EACD;CAGH,IAAMW,IAA0BzB,IAAuBO,GAEjDoB,IAAuBzC,EAAYc,GAAsBiB,EAAc,EACvEW,IAA8BtC,EAAUuC,OAAOF,EAAqB,CAAC,EAErEG,IAA+B5C,EACnCuC,GACAR,EACD;AAKD,QAAO;EACLJ;EACAC;EACAP;EACAmB,gBAAgB1B;EAChB4B;EACAH;EACAM,sCAX2CzC,EAC3CuC,OAAOC,EACT,CAAC;EAUA"}
1
+ {"version":3,"file":"useGenericTokenAllowance.js","names":["useTokenAllowance","formatUnits","Address","useSpender","useAccount","toDecimal","useMemo","isETH","AllowanceData","GenericTokenAllowance","GenericTokenAllowanceMin","UseGenericTokenAllowanceInput","UseGenericTokenAllowanceMinInput","useGenericTokenAllowance","token","amountToApproveInWei","spenderContractType","isConnected","spender","isLoading","isLoadingSpender","data","allowance","isLoadingAllowance","tokenAddress","address","allowanceOnChain","tokenDoesntRequireAllowance","needsApproval","enoughAllowance","calcAllowanceData","BigInt","tokenDecimals","decimals","isLoadingPrerequisites","chainId","network","useGenericTokenAllowanceMin","queryKey","amountToApproveInWeiBigInt","differenceLeftToApprove","allowanceToSet","amountToApproveUnits","allowanceToSetHumanReadable","Number","differenceLeftToApproveUnits","differenceLeftToApproveHumanReadable"],"sources":["../../../../src/hooks/tokens/allowance/useGenericTokenAllowance.ts"],"sourcesContent":["import { useTokenAllowance } from \"./useTokenAllowance\";\nimport { formatUnits, type Address } from \"viem\";\nimport { useSpender } from \"@/hooks/sdk/useSpender\";\n\nimport { useAccount } from \"wagmi\";\nimport { toDecimal } from \"@/lib/utils/toDecimal\";\nimport { useMemo } from \"react\";\nimport { isETH } from \"@/tokens/utils/eth\";\nimport type {\n AllowanceData,\n GenericTokenAllowance,\n GenericTokenAllowanceMin,\n UseGenericTokenAllowanceInput,\n UseGenericTokenAllowanceMinInput,\n} from \"./types\";\n\nexport const useGenericTokenAllowance = ({\n token,\n amountToApproveInWei = 0n,\n spenderContractType,\n}: UseGenericTokenAllowanceInput = {}): GenericTokenAllowance => {\n const { isConnected } = useAccount();\n\n const { spender, isLoading: isLoadingSpender } =\n useSpender(spenderContractType);\n\n const { data: allowance, isLoading: isLoadingAllowance } = useTokenAllowance({\n tokenAddress: token?.address,\n spender,\n });\n\n const allowanceOnChain = useMemo(() => {\n const tokenDoesntRequireAllowance = !token || isETH(token) || !isConnected;\n\n if (tokenDoesntRequireAllowance) {\n return {\n needsApproval: false,\n enoughAllowance: true,\n };\n }\n\n return calcAllowanceData({\n allowance: allowance || 0n,\n amountToApproveInWei: BigInt(amountToApproveInWei), // ok to cast wei\n tokenDecimals: token?.decimals,\n });\n }, [allowance, amountToApproveInWei, isConnected, token]);\n\n const isLoadingPrerequisites =\n isConnected && (isLoadingSpender || isLoadingAllowance);\n\n return {\n token: token?.address as Address | undefined,\n chainId: token?.network,\n allowance,\n isLoadingPrerequisites,\n spender: spender as Address | undefined,\n ...allowanceOnChain,\n };\n};\n\n// exclusively deals with wei\nexport const useGenericTokenAllowanceMin = ({\n tokenAddress,\n amountToApproveInWei = 0n,\n spenderContractType,\n chainId,\n}: UseGenericTokenAllowanceMinInput = {}): GenericTokenAllowanceMin => {\n const { isConnected } = useAccount();\n\n const { spender, isLoading: isLoadingSpender } =\n useSpender(spenderContractType);\n\n const {\n data: allowance,\n isLoading: isLoadingAllowance,\n queryKey,\n } = useTokenAllowance({\n tokenAddress,\n spender,\n chainId,\n });\n\n const allowanceOnChain = useMemo(() => {\n const tokenDoesntRequireAllowance =\n !tokenAddress || isETH({ address: tokenAddress }) || !isConnected;\n\n if (tokenDoesntRequireAllowance) {\n return {\n needsApproval: false,\n enoughAllowance: true,\n };\n }\n\n const amountToApproveInWeiBigInt = BigInt(amountToApproveInWei);\n\n const enoughAllowance =\n !!allowance && allowance >= amountToApproveInWeiBigInt;\n const needsApproval = !enoughAllowance;\n\n if (!needsApproval) {\n return {\n needsApproval: false,\n enoughAllowance,\n };\n }\n\n const differenceLeftToApprove =\n amountToApproveInWeiBigInt - (allowance || 0n);\n\n return {\n needsApproval,\n enoughAllowance,\n allowance,\n allowanceToSet: amountToApproveInWeiBigInt,\n differenceLeftToApprove,\n };\n }, [allowance, amountToApproveInWei, isConnected, tokenAddress]);\n\n const isLoadingPrerequisites =\n isConnected && (isLoadingSpender || isLoadingAllowance);\n\n return {\n allowance,\n isLoadingPrerequisites,\n spender: spender as Address | undefined,\n token: tokenAddress as Address | undefined,\n ...allowanceOnChain,\n queryKey,\n };\n};\n\nfunction calcAllowanceData({\n allowance,\n amountToApproveInWei,\n tokenDecimals,\n}: {\n allowance: bigint;\n amountToApproveInWei: bigint;\n tokenDecimals: number;\n}): AllowanceData {\n const enoughAllowance = allowance >= amountToApproveInWei;\n\n const needsApproval = !enoughAllowance;\n\n if (!needsApproval) {\n return {\n needsApproval: false,\n enoughAllowance,\n };\n }\n\n const differenceLeftToApprove = amountToApproveInWei - allowance;\n\n const amountToApproveUnits = formatUnits(amountToApproveInWei, tokenDecimals);\n const allowanceToSetHumanReadable = toDecimal(Number(amountToApproveUnits));\n\n const differenceLeftToApproveUnits = formatUnits(\n differenceLeftToApprove,\n tokenDecimals\n );\n const differenceLeftToApproveHumanReadable = toDecimal(\n Number(differenceLeftToApproveUnits)\n );\n\n return {\n needsApproval,\n enoughAllowance,\n allowance,\n allowanceToSet: amountToApproveInWei,\n allowanceToSetHumanReadable,\n differenceLeftToApprove,\n differenceLeftToApproveHumanReadable,\n };\n}\n"],"mappings":";;;;;;;;AAgBA,IAAaa,KAA4B,EACvCC,UACAC,0BAAuB,IACvBC,2BACiC,EAAE,KAA4B;CAC/D,IAAM,EAAEC,mBAAgBb,GAAY,EAE9B,EAAEc,YAASC,WAAWC,MAC1BjB,EAAWa,EAAoB,EAE3B,EAAEK,MAAMC,GAAWH,WAAWI,MAAuBvB,EAAkB;EAC3EwB,cAAcV,GAAOW;EACrBP;EACD,CAAC,EAEIQ,IAAmBpB,QACa,CAACQ,KAASP,EAAMO,EAAM,IAAI,CAACG,IAGtD;EACLW,eAAe;EACfC,iBAAiB;EAClB,GAGIC,EAAkB;EACvBR,WAAWA,KAAa;EACxBP,sBAAsBgB,OAAOhB,EAAqB;EAClDiB,eAAelB,GAAOmB;EACvB,CAAC,EACD;EAACX;EAAWP;EAAsBE;EAAaH;EAAM,CAAC,EAEnDoB,IACJjB,MAAgBG,KAAoBG;CAEtC,OAAO;EACLT,OAAOA,GAAOW;EACdU,SAASrB,GAAOsB;EAChBd;EACAY;EACShB;EACT,GAAGQ;EACJ;GAIUW,KAA+B,EAC1Cb,iBACAT,0BAAuB,IACvBC,wBACAmB,eACoC,EAAE,KAA+B;CACrE,IAAM,EAAElB,mBAAgBb,GAAY,EAE9B,EAAEc,YAASC,WAAWC,MAC1BjB,EAAWa,EAAoB,EAE3B,EACJK,MAAMC,GACNH,WAAWI,GACXe,gBACEtC,EAAkB;EACpBwB;EACAN;EACAiB;EACD,CAAC,EAEIT,IAAmBpB,QAAc;EAIrC,IAFE,CAACkB,KAAgBjB,EAAM,EAAEkB,SAASD,GAAc,CAAC,IAAI,CAACP,GAGtD,OAAO;GACLW,eAAe;GACfC,iBAAiB;GAClB;EAGH,IAAMU,IAA6BR,OAAOhB,EAAqB,EAEzDc,IACJ,CAAC,CAACP,KAAaA,KAAaiB,GACxBX,IAAgB,CAACC;EAYvB,OAVKD,IAUE;GACLA;GACAC;GACAP;GACAmB,gBAAgBF;GAChBC,yBAPAD,KAA8BjB,KAAa;GAQ5C,GAfQ;GACLM,eAAe;GACfC;GACD;IAaF;EAACP;EAAWP;EAAsBE;EAAaO;EAAa,CAAC;CAKhE,OAAO;EACLF;EACAY,wBAJAjB,MAAgBG,KAAoBG;EAK3BL;EACTJ,OAAOU;EACP,GAAGE;EACHY;EACD;;AAGH,SAASR,EAAkB,EACzBR,cACAP,yBACAiB,oBAKgB;CAChB,IAAMH,IAAkBP,KAAaP,GAE/Ba,IAAgB,CAACC;CAEvB,IAAI,CAACD,GACH,OAAO;EACLA,eAAe;EACfC;EACD;CAGH,IAAMW,IAA0BzB,IAAuBO,GAEjDoB,IAAuBzC,EAAYc,GAAsBiB,EAAc,EACvEW,IAA8BtC,EAAUuC,OAAOF,EAAqB,CAAC,EAErEG,IAA+B5C,EACnCuC,GACAR,EACD;CAKD,OAAO;EACLJ;EACAC;EACAP;EACAmB,gBAAgB1B;EAChB4B;EACAH;EACAM,sCAX2CzC,EAC3CuC,OAAOC,EACT,CASEC;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenAllowance.js","names":["LONG_STALE_TIME_FOR_REACTIVENESS","isETH","erc20Abi","isAddress","useAccount","useReadContract","UseTokenAllowanceInput","useTokenAllowance","t0","$","_c","tokenAddress","spender","chainId","owner","enabled","t1","undefined","address","account","ownerAddress","t2","t3","t4","t5","staleTime","t6","functionName","const","abi","args","query"],"sources":["../../../../src/hooks/tokens/allowance/useTokenAllowance.ts"],"sourcesContent":["import { LONG_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\nimport { isETH } from \"@/tokens/utils/eth\";\nimport { erc20Abi, isAddress } from \"viem\";\nimport { useAccount, useReadContract } from \"wagmi\";\nimport type { UseTokenAllowanceInput } from \"./types\";\n\nexport const useTokenAllowance = ({\n tokenAddress,\n spender,\n chainId,\n owner,\n enabled = true,\n}: UseTokenAllowanceInput) => {\n const { address: account } = useAccount();\n\n const ownerAddress = owner || account;\n\n return useReadContract({\n address: tokenAddress && isAddress(tokenAddress) ? tokenAddress : undefined,\n functionName: \"allowance\" as const,\n abi: erc20Abi,\n chainId,\n args:\n ownerAddress && spender && isAddress(spender)\n ? [ownerAddress, spender]\n : undefined,\n query: {\n enabled:\n enabled &&\n !!tokenAddress &&\n !!account &&\n !!spender &&\n !isETH({ address: tokenAddress }),\n staleTime: LONG_STALE_TIME_FOR_REACTIVENESS,\n },\n });\n};\n"],"mappings":";;;;;;AAMA,IAAaO,KAAoBC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAC,EAAAC,iBAAAC,YAAAC,YAAAC,UAAAC,SAAAC,MAAAR,GAKhCO,IAAAC,MAAAC,KAAAA,IAAA,KAAAD,GAEA,EAAAE,SAAAC,MAA6Bf,GAAY,EAEzCgB,IAAqBN,KAAAK,GAGVE,IAAAV,KAAgBR,EAAUQ,EAAwC,GAAlEA,IAAAM,KAAAA,GAAkEK;AAAA,CAAAb,EAAA,OAAAW,KAAAX,EAAA,OAAAG,KAKzEU,IAAAF,KAAAR,KAA2BT,EAAUS,EAExB,GAFb,CACKQ,GAAcR,EACN,GAFbK,KAAAA,GAEaR,EAAA,KAAAW,GAAAX,EAAA,KAAAG,GAAAH,EAAA,KAAAa,KAAAA,IAAAb,EAAA;CAAA,IAAAc;AAAA,CAAAd,EAAA,OAAAU,KAAAV,EAAA,OAAAM,KAAAN,EAAA,OAAAG,KAAAH,EAAA,OAAAE,KAGXY,IAAAR,KAAA,CACC,CAACJ,KADF,CAEC,CAACQ,KAFF,CAGC,CAACP,KAHF,CAICX,EAAM,EAAAiB,SAAWP,GAAc,CAAC,EAAAF,EAAA,KAAAU,GAAAV,EAAA,KAAAM,GAAAN,EAAA,KAAAG,GAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAc,KAAAA,IAAAd,EAAA;CAAA,IAAAe;AAAA,CAAAf,EAAA,OAAAc,IAEpCC,IAAAf,EAAA,MARMe,IAAA;EAAAT,SAEHQ;EAIiCE,WACxBzB;EACZ,EAAAS,EAAA,KAAAc,GAAAd,EAAA,KAAAe;CAAA,IAAAE;AACF,QADEjB,EAAA,QAAAI,KAAAJ,EAAA,QAAAY,KAAAZ,EAAA,QAAAa,KAAAb,EAAA,QAAAe,KAjBoBE,IAAA;EAAAR,SACZG;EAAkEM,cAC7D;EAAoBE,KAC7B3B;EAAQW;EAAAiB,MAGXR;EAEaS,OACRP;EASR,EAAAf,EAAA,MAAAI,GAAAJ,EAAA,MAAAY,GAAAZ,EAAA,MAAAa,GAAAb,EAAA,MAAAe,GAAAf,EAAA,MAAAiB,KAAAA,IAAAjB,EAAA,KAlBMJ,EAAgBqB,EAkBrB"}
1
+ {"version":3,"file":"useTokenAllowance.js","names":["LONG_STALE_TIME_FOR_REACTIVENESS","isETH","erc20Abi","isAddress","useAccount","useReadContract","UseTokenAllowanceInput","useTokenAllowance","t0","$","_c","tokenAddress","spender","chainId","owner","enabled","t1","undefined","address","account","ownerAddress","t2","t3","t4","t5","staleTime","t6","functionName","const","abi","args","query"],"sources":["../../../../src/hooks/tokens/allowance/useTokenAllowance.ts"],"sourcesContent":["import { LONG_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\nimport { isETH } from \"@/tokens/utils/eth\";\nimport { erc20Abi, isAddress } from \"viem\";\nimport { useAccount, useReadContract } from \"wagmi\";\nimport type { UseTokenAllowanceInput } from \"./types\";\n\nexport const useTokenAllowance = ({\n tokenAddress,\n spender,\n chainId,\n owner,\n enabled = true,\n}: UseTokenAllowanceInput) => {\n const { address: account } = useAccount();\n\n const ownerAddress = owner || account;\n\n return useReadContract({\n address: tokenAddress && isAddress(tokenAddress) ? tokenAddress : undefined,\n functionName: \"allowance\" as const,\n abi: erc20Abi,\n chainId,\n args:\n ownerAddress && spender && isAddress(spender)\n ? [ownerAddress, spender]\n : undefined,\n query: {\n enabled:\n enabled &&\n !!tokenAddress &&\n !!account &&\n !!spender &&\n !isETH({ address: tokenAddress }),\n staleTime: LONG_STALE_TIME_FOR_REACTIVENESS,\n },\n });\n};\n"],"mappings":";;;;;;AAMA,IAAaO,KAAoBC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAC,EAAAC,iBAAAC,YAAAC,YAAAC,UAAAC,SAAAC,MAAAR,GAKhCO,IAAAC,MAAAC,KAAAA,IAAA,KAAAD,GAEA,EAAAE,SAAAC,MAA6Bf,GAAY,EAEzCgB,IAAqBN,KAAAK,GAGVE,IAAAV,KAAgBR,EAAUQ,EAAwC,GAAlEA,IAAAM,KAAAA,GAAkEK;CAAA,AAAAb,EAAA,OAAAW,KAAAX,EAAA,OAAAG,KAKzEU,IAAAF,KAAAR,KAA2BT,EAAUS,EAExB,GAFb,CACKQ,GAAcR,EACN,GAFbK,KAAAA,GAEaR,EAAA,KAAAW,GAAAX,EAAA,KAAAG,GAAAH,EAAA,KAAAa,KAAAA,IAAAb,EAAA;CAAA,IAAAc;CAAA,AAAAd,EAAA,OAAAU,KAAAV,EAAA,OAAAM,KAAAN,EAAA,OAAAG,KAAAH,EAAA,OAAAE,KAGXY,IAAAR,KAAA,CACC,CAACJ,KADF,CAEC,CAACQ,KAFF,CAGC,CAACP,KAHF,CAICX,EAAM,EAAAiB,SAAWP,GAAc,CAAC,EAAAF,EAAA,KAAAU,GAAAV,EAAA,KAAAM,GAAAN,EAAA,KAAAG,GAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAc,KAAAA,IAAAd,EAAA;CAAA,IAAAe;CAAA,AAAAf,EAAA,OAAAc,IAEpCC,IAAAf,EAAA,MARMe,IAAA;EAAAT,SAEHQ;EAIiCE,WACxBzB;EACZ,EAAAS,EAAA,KAAAc,GAAAd,EAAA,KAAAe;CAAA,IAAAE;CACF,OADEjB,EAAA,QAAAI,KAAAJ,EAAA,QAAAY,KAAAZ,EAAA,QAAAa,KAAAb,EAAA,QAAAe,KAjBoBE,IAAA;EAAAR,SACZG;EAAkEM,cAC7D;EAAoBE,KAC7B3B;EAAQW;EAAAiB,MAGXR;EAEaS,OACRP;EASR,EAAAf,EAAA,MAAAI,GAAAJ,EAAA,MAAAY,GAAAZ,EAAA,MAAAa,GAAAb,EAAA,MAAAe,GAAAf,EAAA,MAAAiB,KAAAA,IAAAjB,EAAA,KAlBMJ,EAAgBqB,EAkBrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["amountAfterSlippage","GenericTokenAllowanceMin","SwapSideUnion","genericAllowanceWithSlippage","allowance","swapSide","slippage","allowanceToSet","allowanceWithSlippage","undefined","BigInt","toString","toFixed"],"sources":["../../../../src/hooks/tokens/allowance/utils.ts"],"sourcesContent":["import { amountAfterSlippage } from \"@/lib/utils/slippage\";\nimport type { GenericTokenAllowanceMin } from \"./types\";\nimport type { SwapSideUnion } from \"@velora-dex/sdk\";\n\n/**\n * Adjusts GenericTokenAllowance by applying slippage for BUY side.\n */\nexport function genericAllowanceWithSlippage({\n allowance,\n swapSide,\n slippage,\n}: {\n allowance: GenericTokenAllowanceMin;\n swapSide: SwapSideUnion;\n slippage: number;\n}): GenericTokenAllowanceMin {\n return {\n ...allowance,\n allowanceToSet: allowanceWithSlippage({\n allowance: allowance.allowanceToSet,\n swapSide,\n slippage,\n }),\n };\n}\n\n/**\n * Adjusts allowance by applying slippage for BUY side.\n */\nexport function allowanceWithSlippage({\n allowance,\n swapSide,\n slippage,\n}: {\n allowance?: bigint | string;\n swapSide: SwapSideUnion;\n slippage: number;\n}): bigint | undefined {\n if (allowance === undefined) return;\n if (swapSide === \"BUY\") {\n return BigInt(\n amountAfterSlippage(allowance.toString(), slippage, swapSide).toFixed(0)\n );\n }\n return BigInt(allowance);\n}\n"],"mappings":";;AAOA,SAAgBG,EAA6B,EAC3CC,cACAC,aACAC,eAK2B;AAC3B,QAAO;EACL,GAAGF;EACHG,gBAAgBC,EAAsB;GACpCJ,WAAWA,EAAUG;GACrBF;GACAC;GACD,CAAA;EACF;;AAMH,SAAgBE,EAAsB,EACpCJ,cACAC,aACAC,eAKqB;AACjBF,WAAcK,KAAAA,EAMlB,QAJSC,OADLL,MAAa,QAEbL,EAAoBI,EAAUO,UAAU,EAAEL,GAAUD,EAAS,CAACO,QAAQ,EACxE,GAEYR,EAFX"}
1
+ {"version":3,"file":"utils.js","names":["amountAfterSlippage","GenericTokenAllowanceMin","SwapSideUnion","genericAllowanceWithSlippage","allowance","swapSide","slippage","allowanceToSet","allowanceWithSlippage","undefined","BigInt","toString","toFixed"],"sources":["../../../../src/hooks/tokens/allowance/utils.ts"],"sourcesContent":["import { amountAfterSlippage } from \"@/lib/utils/slippage\";\nimport type { GenericTokenAllowanceMin } from \"./types\";\nimport type { SwapSideUnion } from \"@velora-dex/sdk\";\n\n/**\n * Adjusts GenericTokenAllowance by applying slippage for BUY side.\n */\nexport function genericAllowanceWithSlippage({\n allowance,\n swapSide,\n slippage,\n}: {\n allowance: GenericTokenAllowanceMin;\n swapSide: SwapSideUnion;\n slippage: number;\n}): GenericTokenAllowanceMin {\n return {\n ...allowance,\n allowanceToSet: allowanceWithSlippage({\n allowance: allowance.allowanceToSet,\n swapSide,\n slippage,\n }),\n };\n}\n\n/**\n * Adjusts allowance by applying slippage for BUY side.\n */\nexport function allowanceWithSlippage({\n allowance,\n swapSide,\n slippage,\n}: {\n allowance?: bigint | string;\n swapSide: SwapSideUnion;\n slippage: number;\n}): bigint | undefined {\n if (allowance === undefined) return;\n if (swapSide === \"BUY\") {\n return BigInt(\n amountAfterSlippage(allowance.toString(), slippage, swapSide).toFixed(0)\n );\n }\n return BigInt(allowance);\n}\n"],"mappings":";;AAOA,SAAgBG,EAA6B,EAC3CC,cACAC,aACAC,eAK2B;CAC3B,OAAO;EACL,GAAGF;EACHG,gBAAgBC,EAAsB;GACpCJ,WAAWA,EAAUG;GACrBF;GACAC;GACD,CAAA;EACF;;AAMH,SAAgBE,EAAsB,EACpCJ,cACAC,aACAC,eAKqB;CACjBF,UAAcK,KAAAA,GAMlB,OAJSC,OADLL,MAAa,QAEbL,EAAoBI,EAAUO,UAAU,EAAEL,GAAUD,EAAS,CAACO,QAAQ,EACxE,GAEYR,EAFX"}
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","names":["wagmiConfig","ETH_ADDRESS_LOWERCASE","isETH","UseQueryOptions","assert","erc20Abi","getBalance","multicall","BalanceOfResult","ProduceQueryOptionsInput","TokenBalancesQueryKey","AddressBalanceMap","constructTokenBalancesQueryKey","chainId","tokenAddressesLowercase","account","Pick","BATCH_SIZE","constructTokenBalancesQueryOptions","enabled","TData","Error","addressesWithoutEth","filter","address","isRequestedEthBalance","length","queryKey","queryFn","constructAddressBalanceMap","results","reduce","acc","result","index","tokenAddress","contracts","map","abi","functionName","const","args","client","getClient","multicallPromise","batchSize","addressBalanceMap","ethBalance","multiBalances","status","staleTime"],"sources":["../../../../src/hooks/tokens/balances/queries.ts"],"sourcesContent":["import { wagmiConfig } from \"@/lib/web3/wagmi/config\";\nimport { ETH_ADDRESS_LOWERCASE } from \"@/tokens/constants\";\nimport { isETH } from \"@/tokens/utils/eth\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport { assert } from \"ts-essentials\";\nimport { erc20Abi } from \"viem\";\nimport { getBalance, multicall } from \"viem/actions\";\nimport type {\n BalanceOfResult,\n ProduceQueryOptionsInput,\n TokenBalancesQueryKey,\n AddressBalanceMap,\n} from \"./types\";\n\nfunction constructTokenBalancesQueryKey({\n chainId,\n tokenAddressesLowercase,\n account,\n}: Pick<\n ProduceQueryOptionsInput,\n \"chainId\" | \"tokenAddressesLowercase\" | \"account\"\n>): TokenBalancesQueryKey {\n return [\"token-balances\", chainId, tokenAddressesLowercase, account];\n}\n\n// arbitrary, set experimentally as a trade-off between performance (number of calls) and RPC provider limits\nconst BATCH_SIZE = 1024 * 20; // 20 KB\n// when changing this number retest all chains with token_balances query (the heaviest query)\n// different RPC providers have different limits, and break at some batch sizes\n\nexport function constructTokenBalancesQueryOptions<TData>({\n tokenAddressesLowercase,\n chainId,\n account,\n enabled = true,\n}: ProduceQueryOptionsInput<TData>): UseQueryOptions<\n AddressBalanceMap,\n Error,\n TData,\n TokenBalancesQueryKey\n> {\n const addressesWithoutEth = tokenAddressesLowercase.filter(\n (address) => !isETH({ address })\n );\n\n const isRequestedEthBalance =\n addressesWithoutEth.length < tokenAddressesLowercase.length;\n\n const queryKey = constructTokenBalancesQueryKey({\n chainId,\n tokenAddressesLowercase: tokenAddressesLowercase,\n account,\n });\n\n return {\n queryKey,\n queryFn: async () => {\n assert(account, \"account is required\");\n\n function constructAddressBalanceMap(results: BalanceOfResult[]) {\n return results.reduce<AddressBalanceMap>((acc, result, index) => {\n const tokenAddress = addressesWithoutEth[index];\n if (tokenAddress) acc[tokenAddress] = result;\n return acc;\n }, {});\n }\n\n const contracts = addressesWithoutEth.map((address) => ({\n address,\n abi: erc20Abi,\n functionName: \"balanceOf\" as const,\n args: [account],\n chainId,\n }));\n\n const client = wagmiConfig.getClient({ chainId });\n\n const multicallPromise = multicall(client, {\n contracts,\n batchSize: BATCH_SIZE,\n });\n\n let addressBalanceMap: AddressBalanceMap = {};\n\n if (isRequestedEthBalance) {\n const ethBalance = await getBalance(client, {\n address: account,\n });\n const multiBalances = await multicallPromise;\n\n addressBalanceMap = constructAddressBalanceMap(multiBalances);\n\n addressBalanceMap[ETH_ADDRESS_LOWERCASE] = {\n result: ethBalance,\n status: \"success\",\n };\n } else {\n const multiBalances = await multicallPromise;\n addressBalanceMap = constructAddressBalanceMap(multiBalances);\n }\n\n return addressBalanceMap;\n },\n enabled: enabled && !!account && tokenAddressesLowercase.length > 0,\n staleTime: 25_000,\n };\n}\n"],"mappings":";;;;;;;AAcA,SAASY,EAA+B,EACtCC,YACAC,4BACAC,cAIwB;AACxB,QAAO;EAAC;EAAkBF;EAASC;EAAyBC;EAAQ;;AAItE,IAAME,IAAa,OAAO;AAI1B,SAAgBC,EAA0C,EACxDJ,4BACAD,YACAE,YACAI,aAAU,MAMV;CACA,IAAMG,IAAsBR,EAAwBS,QACjDC,MAAY,CAACtB,EAAM,EAAEsB,YAAS,CACjC,CAAC,EAEKC,IACJH,EAAoBI,SAASZ,EAAwBY;AAQvD,QAAO;EACLC,UAPef,EAA+B;GAC9CC;GACyBC;GACzBC;GACD,CAAC;EAIAa,SAAS,YAAY;AACnBxB,KAAOW,GAAS,sBAAsB;GAEtC,SAASc,EAA2BC,GAA4B;AAC9D,WAAOA,EAAQC,QAA2BC,GAAKC,GAAQC,MAAU;KAC/D,IAAMC,IAAeb,EAAoBY;AAEzC,YADIC,MAAcH,EAAIG,KAAgBF,IAC/BD;OACN,EAAE,CAAC;;GAGR,IAAMI,IAAYd,EAAoBe,KAAKb,OAAa;IACtDA;IACAc,KAAKjC;IACLkC,cAAc;IACdE,MAAM,CAAC1B,EAAQ;IACfF;IACD,EAAE,EAEG6B,IAAS1C,EAAY2C,UAAU,EAAE9B,YAAS,CAAC,EAE3C+B,IAAmBrC,EAAUmC,GAAQ;IACzCN;IACAS,WAAW5B;IACZ,CAAC,EAEE6B,IAAuC,EAAE;AAE7C,OAAIrB,GAAuB;IACzB,IAAMsB,IAAa,MAAMzC,EAAWoC,GAAQ,EAC1ClB,SAAST,GACV,CAAC;AAKF+B,IAFAA,IAAoBjB,EAFE,MAAMe,EAEiC,EAE7DE,EAAkB7C,KAAyB;KACzCgC,QAAQc;KACRE,QAAQ;KACT;SAGDH,KAAoBjB,EADE,MAAMe,EACiC;AAG/D,UAAOE;;EAET3B,SAASA,KAAW,CAAC,CAACJ,KAAWD,EAAwBY,SAAS;EAClEwB,WAAW;EACZ"}
1
+ {"version":3,"file":"queries.js","names":["wagmiConfig","ETH_ADDRESS_LOWERCASE","isETH","UseQueryOptions","assert","erc20Abi","getBalance","multicall","BalanceOfResult","ProduceQueryOptionsInput","TokenBalancesQueryKey","AddressBalanceMap","constructTokenBalancesQueryKey","chainId","tokenAddressesLowercase","account","Pick","BATCH_SIZE","constructTokenBalancesQueryOptions","enabled","TData","Error","addressesWithoutEth","filter","address","isRequestedEthBalance","length","queryKey","queryFn","constructAddressBalanceMap","results","reduce","acc","result","index","tokenAddress","contracts","map","abi","functionName","const","args","client","getClient","multicallPromise","batchSize","addressBalanceMap","ethBalance","multiBalances","status","staleTime"],"sources":["../../../../src/hooks/tokens/balances/queries.ts"],"sourcesContent":["import { wagmiConfig } from \"@/lib/web3/wagmi/config\";\nimport { ETH_ADDRESS_LOWERCASE } from \"@/tokens/constants\";\nimport { isETH } from \"@/tokens/utils/eth\";\nimport type { UseQueryOptions } from \"@tanstack/react-query\";\nimport { assert } from \"ts-essentials\";\nimport { erc20Abi } from \"viem\";\nimport { getBalance, multicall } from \"viem/actions\";\nimport type {\n BalanceOfResult,\n ProduceQueryOptionsInput,\n TokenBalancesQueryKey,\n AddressBalanceMap,\n} from \"./types\";\n\nfunction constructTokenBalancesQueryKey({\n chainId,\n tokenAddressesLowercase,\n account,\n}: Pick<\n ProduceQueryOptionsInput,\n \"chainId\" | \"tokenAddressesLowercase\" | \"account\"\n>): TokenBalancesQueryKey {\n return [\"token-balances\", chainId, tokenAddressesLowercase, account];\n}\n\n// arbitrary, set experimentally as a trade-off between performance (number of calls) and RPC provider limits\nconst BATCH_SIZE = 1024 * 20; // 20 KB\n// when changing this number retest all chains with token_balances query (the heaviest query)\n// different RPC providers have different limits, and break at some batch sizes\n\nexport function constructTokenBalancesQueryOptions<TData>({\n tokenAddressesLowercase,\n chainId,\n account,\n enabled = true,\n}: ProduceQueryOptionsInput<TData>): UseQueryOptions<\n AddressBalanceMap,\n Error,\n TData,\n TokenBalancesQueryKey\n> {\n const addressesWithoutEth = tokenAddressesLowercase.filter(\n (address) => !isETH({ address })\n );\n\n const isRequestedEthBalance =\n addressesWithoutEth.length < tokenAddressesLowercase.length;\n\n const queryKey = constructTokenBalancesQueryKey({\n chainId,\n tokenAddressesLowercase: tokenAddressesLowercase,\n account,\n });\n\n return {\n queryKey,\n queryFn: async () => {\n assert(account, \"account is required\");\n\n function constructAddressBalanceMap(results: BalanceOfResult[]) {\n return results.reduce<AddressBalanceMap>((acc, result, index) => {\n const tokenAddress = addressesWithoutEth[index];\n if (tokenAddress) acc[tokenAddress] = result;\n return acc;\n }, {});\n }\n\n const contracts = addressesWithoutEth.map((address) => ({\n address,\n abi: erc20Abi,\n functionName: \"balanceOf\" as const,\n args: [account],\n chainId,\n }));\n\n const client = wagmiConfig.getClient({ chainId });\n\n const multicallPromise = multicall(client, {\n contracts,\n batchSize: BATCH_SIZE,\n });\n\n let addressBalanceMap: AddressBalanceMap = {};\n\n if (isRequestedEthBalance) {\n const ethBalance = await getBalance(client, {\n address: account,\n });\n const multiBalances = await multicallPromise;\n\n addressBalanceMap = constructAddressBalanceMap(multiBalances);\n\n addressBalanceMap[ETH_ADDRESS_LOWERCASE] = {\n result: ethBalance,\n status: \"success\",\n };\n } else {\n const multiBalances = await multicallPromise;\n addressBalanceMap = constructAddressBalanceMap(multiBalances);\n }\n\n return addressBalanceMap;\n },\n enabled: enabled && !!account && tokenAddressesLowercase.length > 0,\n staleTime: 25_000,\n };\n}\n"],"mappings":";;;;;;;AAcA,SAASY,EAA+B,EACtCC,YACAC,4BACAC,cAIwB;CACxB,OAAO;EAAC;EAAkBF;EAASC;EAAyBC;EAAQ;;AAItE,IAAME,IAAa,OAAO;AAI1B,SAAgBC,EAA0C,EACxDJ,4BACAD,YACAE,YACAI,aAAU,MAMV;CACA,IAAMG,IAAsBR,EAAwBS,QACjDC,MAAY,CAACtB,EAAM,EAAEsB,YAAS,CACjC,CAAC,EAEKC,IACJH,EAAoBI,SAASZ,EAAwBY;CAQvD,OAAO;EACLC,UAPef,EAA+B;GAC9CC;GACyBC;GACzBC;GACD,CAGCY;EACAC,SAAS,YAAY;GACnBxB,EAAOW,GAAS,sBAAsB;GAEtC,SAASc,EAA2BC,GAA4B;IAC9D,OAAOA,EAAQC,QAA2BC,GAAKC,GAAQC,MAAU;KAC/D,IAAMC,IAAeb,EAAoBY;KAEzC,OADIC,MAAcH,EAAIG,KAAgBF,IAC/BD;OACN,EAAE,CAAC;;GAGR,IAAMI,IAAYd,EAAoBe,KAAKb,OAAa;IACtDA;IACAc,KAAKjC;IACLkC,cAAc;IACdE,MAAM,CAAC1B,EAAQ;IACfF;IACD,EAAE,EAEG6B,IAAS1C,EAAY2C,UAAU,EAAE9B,YAAS,CAAC,EAE3C+B,IAAmBrC,EAAUmC,GAAQ;IACzCN;IACAS,WAAW5B;IACZ,CAAC,EAEE6B,IAAuC,EAAE;GAE7C,IAAIrB,GAAuB;IACzB,IAAMsB,IAAa,MAAMzC,EAAWoC,GAAQ,EAC1ClB,SAAST,GACV,CAAC;IAKF+B,AAFAA,IAAoBjB,EAA2BmB,MAFnBJ,EAEiC,EAE7DE,EAAkB7C,KAAyB;KACzCgC,QAAQc;KACRE,QAAQ;KACT;UAGDH,IAAoBjB,EAA2BmB,MADnBJ,EACiC;GAG/D,OAAOE;;EAET3B,SAASA,KAAW,CAAC,CAACJ,KAAWD,EAAwBY,SAAS;EAClEwB,WAAW;EACZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAttachTokenBalanceMultichain.js","names":["Token","useCallback","useMemo","SupportedChainId","formatUnits","isAddress","useMultiChainTokenBalances","useMultiChainTokenPrices","isSupportedChainId","useAccount","useSelectedTokenBalances","useTradeMode","AddTokenBalanceToToken","Pick","token","T","balance","usdBalance","useAttachTokenBalanceMultichain","t0","$","_c","addressesMap","intent","t1","undefined","address","account","tradeMode","t2","multiChainTokenBalances","selectedTokenBalances","t3","Object","keys","map","Number","filter","chainIds","multiChainTokenPrices","t4","loweredAddress","toLowerCase","network","result","tokenPrice","price","BigInt","decimals","toString"],"sources":["../../../../src/hooks/tokens/balances/useAttachTokenBalanceMultichain.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\n\nimport { useCallback, useMemo } from \"react\";\n\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { formatUnits, isAddress } from \"viem\";\nimport { useMultiChainTokenBalances } from \"./useMultichainTokenBalances\";\nimport { useMultiChainTokenPrices } from \"../prices/useMultichainTokenPrices\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\n\nimport { useAccount } from \"wagmi\";\nimport { useSelectedTokenBalances } from \"./useSelectedTokenBalances\";\nimport { useTradeMode } from \"@/core/state/tradeModeAtom\";\n\ntype AddTokenBalanceToToken = <\n T extends Pick<Token, \"address\" | \"network\" | \"decimals\">,\n>(\n token: T\n) => T & { balance?: string; usdBalance?: number };\n\n/**\n This hook will fetch the balances and return a function that will add a balance to the token if available.\n */\nexport const useAttachTokenBalanceMultichain = ({\n addressesMap,\n intent = \"fetch\",\n}: {\n addressesMap: Partial<Record<SupportedChainId, string[]>>;\n intent?: \"fetch\" | \"prefetch\";\n}): AddTokenBalanceToToken => {\n const { address: account } = useAccount();\n const tradeMode = useTradeMode();\n\n const multiChainTokenBalances = useMultiChainTokenBalances({\n addressesMap,\n intent,\n });\n const selectedTokenBalances = useSelectedTokenBalances(tradeMode);\n\n const chainIds = useMemo(\n () => Object.keys(addressesMap).map(Number).filter(isSupportedChainId),\n [addressesMap]\n );\n\n const multiChainTokenPrices = useMultiChainTokenPrices(chainIds);\n\n return useCallback<AddTokenBalanceToToken>(\n (token) => {\n if (!account) return token;\n\n const loweredAddress = token.address.toLowerCase();\n\n if (!isAddress(loweredAddress)) return token;\n\n const balance =\n // selected token balances have priority,\n // because only these balances are invalidated after each transaction/order,\n // and have the most frequent refetch interval\n selectedTokenBalances[token.network]?.[loweredAddress] ??\n // otherwise grab the balance from the multichain balances query\n multiChainTokenBalances[token.network]?.[loweredAddress]?.result;\n\n if (balance === undefined) return token;\n\n const tokenPrice =\n multiChainTokenPrices[token.network]?.[loweredAddress]?.price;\n\n const usdBalance = tokenPrice\n ? +formatUnits(BigInt(balance), token.decimals) * tokenPrice\n : undefined;\n\n return {\n ...token,\n balance: balance.toString(),\n usdBalance,\n };\n },\n [\n account,\n multiChainTokenBalances,\n multiChainTokenPrices,\n selectedTokenBalances,\n ]\n );\n};\n"],"mappings":";;;;;;;;;;AAuBA,IAAakB,KAAkCC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAC,EAAAC,iBAAAC,QAAAC,MAAAL,GAE9CI,IAAAC,MAAAC,KAAAA,IAAA,UAAAD,GAKA,EAAAE,SAAAC,MAA6BlB,GAAY,EACzCmB,IAAkBjB,GAAc,EAACkB;AAAA,CAAAT,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAE0BM,IAAA;EAAAP;EAAAC;EAG1D,EAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAS,KAAAA,IAAAT,EAAA;CAHD,IAAAU,IAAgCxB,EAA2BuB,EAGzD,EACFE,IAA8BrB,EAAyBkB,EAAU,EAACI;AAAA,CAAAZ,EAAA,OAAAE,IAGMU,IAAAZ,EAAA,MAAhEY,IAAAC,OAAMC,KAAMZ,EAAa,CAAAa,IAAKC,OAAO,CAAAC,OAAQ7B,EAAmB,EAAAY,EAAA,KAAAE,GAAAF,EAAA,KAAAY;CAIxE,IAAAO,IAA8BhC,EAJtByB,EAIwD,EAACQ;AAgC9D,QAhC8DpB,EAAA,OAAAO,KAAAP,EAAA,OAAAU,KAAAV,EAAA,OAAAmB,KAAAnB,EAAA,OAAAW,KAG/DS,KAAA1B,MAAA;AACE,MAAI,CAACa,EAAO,QAASb;EAErB,IAAA2B,IAAuB3B,EAAKY,QAAQgB,aAAc;AAElD,MAAI,CAACrC,EAAUoC,EAAe,CAAA,QAAS3B;EAEvC,IAAAE,IAIEe,EAAsBjB,EAAK6B,WAAYF,MAEvCX,EAAwBhB,EAAK6B,WAAYF,IAAuBG;AAElE,MAAI5B,MAAYS,KAAAA,EAAS,QAASX;EAElC,IAAA+B,IACEN,EAAsBzB,EAAK6B,WAAYF,IAAsBK,OAE/D7B,IAAmB4B,IACf,CAACzC,EAAY2C,OAAO/B,EAAQ,EAAEF,EAAKkC,SAAU,GAAGH,IADjCpB,KAAAA;AAEL,SAEP;GAAA,GACFX;GAAKE,SACCA,EAAOiC,UAAW;GAAAhC;GAE5B;IACFG,EAAA,KAAAO,GAAAP,EAAA,KAAAU,GAAAV,EAAA,KAAAmB,GAAAnB,EAAA,KAAAW,GAAAX,EAAA,KAAAoB,KAAAA,IAAApB,EAAA,IA9BIoB"}
1
+ {"version":3,"file":"useAttachTokenBalanceMultichain.js","names":["Token","useCallback","useMemo","SupportedChainId","formatUnits","isAddress","useMultiChainTokenBalances","useMultiChainTokenPrices","isSupportedChainId","useAccount","useSelectedTokenBalances","useTradeMode","AddTokenBalanceToToken","Pick","token","T","balance","usdBalance","useAttachTokenBalanceMultichain","t0","$","_c","addressesMap","intent","t1","undefined","address","account","tradeMode","t2","multiChainTokenBalances","selectedTokenBalances","t3","Object","keys","map","Number","filter","chainIds","multiChainTokenPrices","t4","loweredAddress","toLowerCase","network","result","tokenPrice","price","BigInt","decimals","toString"],"sources":["../../../../src/hooks/tokens/balances/useAttachTokenBalanceMultichain.ts"],"sourcesContent":["import type { Token } from \"@/tokens/state/types\";\n\nimport { useCallback, useMemo } from \"react\";\n\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { formatUnits, isAddress } from \"viem\";\nimport { useMultiChainTokenBalances } from \"./useMultichainTokenBalances\";\nimport { useMultiChainTokenPrices } from \"../prices/useMultichainTokenPrices\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\n\nimport { useAccount } from \"wagmi\";\nimport { useSelectedTokenBalances } from \"./useSelectedTokenBalances\";\nimport { useTradeMode } from \"@/core/state/tradeModeAtom\";\n\ntype AddTokenBalanceToToken = <\n T extends Pick<Token, \"address\" | \"network\" | \"decimals\">,\n>(\n token: T\n) => T & { balance?: string; usdBalance?: number };\n\n/**\n This hook will fetch the balances and return a function that will add a balance to the token if available.\n */\nexport const useAttachTokenBalanceMultichain = ({\n addressesMap,\n intent = \"fetch\",\n}: {\n addressesMap: Partial<Record<SupportedChainId, string[]>>;\n intent?: \"fetch\" | \"prefetch\";\n}): AddTokenBalanceToToken => {\n const { address: account } = useAccount();\n const tradeMode = useTradeMode();\n\n const multiChainTokenBalances = useMultiChainTokenBalances({\n addressesMap,\n intent,\n });\n const selectedTokenBalances = useSelectedTokenBalances(tradeMode);\n\n const chainIds = useMemo(\n () => Object.keys(addressesMap).map(Number).filter(isSupportedChainId),\n [addressesMap]\n );\n\n const multiChainTokenPrices = useMultiChainTokenPrices(chainIds);\n\n return useCallback<AddTokenBalanceToToken>(\n (token) => {\n if (!account) return token;\n\n const loweredAddress = token.address.toLowerCase();\n\n if (!isAddress(loweredAddress)) return token;\n\n const balance =\n // selected token balances have priority,\n // because only these balances are invalidated after each transaction/order,\n // and have the most frequent refetch interval\n selectedTokenBalances[token.network]?.[loweredAddress] ??\n // otherwise grab the balance from the multichain balances query\n multiChainTokenBalances[token.network]?.[loweredAddress]?.result;\n\n if (balance === undefined) return token;\n\n const tokenPrice =\n multiChainTokenPrices[token.network]?.[loweredAddress]?.price;\n\n const usdBalance = tokenPrice\n ? +formatUnits(BigInt(balance), token.decimals) * tokenPrice\n : undefined;\n\n return {\n ...token,\n balance: balance.toString(),\n usdBalance,\n };\n },\n [\n account,\n multiChainTokenBalances,\n multiChainTokenPrices,\n selectedTokenBalances,\n ]\n );\n};\n"],"mappings":";;;;;;;;;;AAuBA,IAAakB,KAAkCC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAC,EAAAC,iBAAAC,QAAAC,MAAAL,GAE9CI,IAAAC,MAAAC,KAAAA,IAAA,UAAAD,GAKA,EAAAE,SAAAC,MAA6BlB,GAAY,EACzCmB,IAAkBjB,GAAc,EAACkB;CAAA,AAAAT,EAAA,OAAAE,KAAAF,EAAA,OAAAG,KAE0BM,IAAA;EAAAP;EAAAC;EAG1D,EAAAH,EAAA,KAAAE,GAAAF,EAAA,KAAAG,GAAAH,EAAA,KAAAS,KAAAA,IAAAT,EAAA;CAHD,IAAAU,IAAgCxB,EAA2BuB,EAGzD,EACFE,IAA8BrB,EAAyBkB,EAAU,EAACI;CAAA,AAAAZ,EAAA,OAAAE,IAGMU,IAAAZ,EAAA,MAAhEY,IAAAC,OAAMC,KAAMZ,EAAa,CAAAa,IAAKC,OAAO,CAAAC,OAAQ7B,EAAmB,EAAAY,EAAA,KAAAE,GAAAF,EAAA,KAAAY;CAIxE,IAAAO,IAA8BhC,EAAyB+B,EAAS,EAACE;CAgC9D,OAhC8DpB,EAAA,OAAAO,KAAAP,EAAA,OAAAU,KAAAV,EAAA,OAAAmB,KAAAnB,EAAA,OAAAW,KAG/DS,KAAA1B,MAAA;EACE,IAAI,CAACa,GAAO,OAASb;EAErB,IAAA2B,IAAuB3B,EAAKY,QAAQgB,aAAc;EAElD,IAAI,CAACrC,EAAUoC,EAAe,EAAA,OAAS3B;EAEvC,IAAAE,IAIEe,EAAsBjB,EAAK6B,WAAYF,MAEvCX,EAAwBhB,EAAK6B,WAAYF,IAAuBG;EAElE,IAAI5B,MAAYS,KAAAA,GAAS,OAASX;EAElC,IAAA+B,IACEN,EAAsBzB,EAAK6B,WAAYF,IAAsBK,OAE/D7B,IAAmB4B,IACf,CAACzC,EAAY2C,OAAO/B,EAAQ,EAAEF,EAAKkC,SAAU,GAAGH,IADjCpB,KAAAA;EAEL,OAEP;GAAA,GACFX;GAAKE,SACCA,EAAOiC,UAAW;GAAAhC;GAE5B;IACFG,EAAA,KAAAO,GAAAP,EAAA,KAAAU,GAAAV,EAAA,KAAAmB,GAAAnB,EAAA,KAAAW,GAAAX,EAAA,KAAAoB,KAAAA,IAAApB,EAAA,IA9BIoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useInvalidateTokenData.js","names":["NonceMethod","Query","QueryClient","QueryKey","erc20Abi","Address","Config","ReadContractQueryKey","GetBalanceQueryKey","ReadContractsQueryKey","LooseQueryMatchToInvalidate","queryKey","Q","exact","predicate","query","ETHBalanceQueryMatch","ERC20BalanceQueryKey","ERC20BalanceAllowanceQueryMatch","isReadContractQueryKey","NoncesQueryKey","address","abi","functionName","args","NoncesQueryMatch","nonceMethods","isReadContractsQueryKey","TokenFuncsToInvalidate","allowance","balanceOf","nonces","invalidateBalancesAndAllowancesFactory","queryClient","queries","ethBalanceQuery","push","ERC20Func","NonNullable","tokenFuncs","length","matchedERC20Funcs","erc20BalanceQuery","includes","matchedNonceMethods","nonceQuery","firstMethod","contracts","Promise","all","map","invalidateQueries"],"sources":["../../../../src/hooks/tokens/balances/useInvalidateTokenData.ts"],"sourcesContent":["import type { NonceMethod } from \"@/hooks/permit/hooks/permit1/usePermit1Nonce\";\nimport { Query, QueryClient, type QueryKey } from \"@tanstack/react-query\";\n\nimport { erc20Abi, type Address } from \"viem\";\nimport { type Config } from \"wagmi\";\nimport {\n type ReadContractQueryKey,\n type GetBalanceQueryKey,\n type ReadContractsQueryKey,\n} from \"wagmi/query\";\n\ntype LooseQueryMatchToInvalidate<Q extends QueryKey> = {\n queryKey: [Q[0]];\n exact: false;\n predicate?: (query: Query) => boolean;\n};\n\ntype ETHBalanceQueryMatch = LooseQueryMatchToInvalidate<\n GetBalanceQueryKey<Config>\n>;\n\ntype ERC20BalanceQueryKey = ReadContractQueryKey<\n typeof erc20Abi,\n \"balanceOf\" | \"allowance\",\n [Address],\n Config\n>;\ntype ERC20BalanceAllowanceQueryMatch =\n LooseQueryMatchToInvalidate<ERC20BalanceQueryKey>;\n\nfunction isReadContractQueryKey(\n queryKey: QueryKey\n): queryKey is ReadContractQueryKey<unknown[], string, unknown[], Config> {\n return queryKey[0] === \"readContract\";\n}\n\ntype NoncesQueryKey = ReadContractsQueryKey<\n {\n address: Address;\n abi: typeof erc20Abi;\n functionName: NonceMethod;\n args: [Address];\n }[],\n boolean,\n Config\n>;\n\ntype NoncesQueryMatch = LooseQueryMatchToInvalidate<NoncesQueryKey>;\nconst nonceMethods: NonceMethod[] = [\"nonces\", \"_nonces\", \"nonce\", \"getNonce\"];\n\nfunction isReadContractsQueryKey(\n queryKey: QueryKey\n): queryKey is ReadContractsQueryKey<unknown[], boolean, Config> {\n return queryKey[0] === \"readContracts\";\n}\n\ntype TokenFuncsToInvalidate = {\n allowance?: boolean;\n balanceOf?: boolean;\n nonces?: boolean; // invalidate queries with Permit1 nonces,\n // Permit2 nonces can be safely incremented without syncing with what's on chain\n};\n/**\n * Helper function constructor to invalidate token-related query cache entries.\n * Used to refresh token balances and allowances after transactions that modify them.\n * Can selectively invalidate either balance or allowance queries, or both.\n * Invalidates for all tokens that have their queries currently mounted, which is easier than matching.\n */\nexport const invalidateBalancesAndAllowancesFactory =\n (queryClient: QueryClient) =>\n async ({\n allowance = true,\n balanceOf = true,\n nonces = false,\n }: TokenFuncsToInvalidate = {}) => {\n const queries: LooseQueryMatchToInvalidate<QueryKey>[] = [];\n\n if (balanceOf) {\n const ethBalanceQuery: ETHBalanceQueryMatch = {\n // easier to just match the queryKey base\n queryKey: [\"balance\"],\n exact: false,\n };\n queries.push(ethBalanceQuery);\n }\n\n type ERC20Func = NonNullable<ERC20BalanceQueryKey[1][\"functionName\"]>;\n\n const tokenFuncs: ERC20Func[] = [];\n if (balanceOf) {\n tokenFuncs.push(\"balanceOf\");\n }\n if (allowance) {\n tokenFuncs.push(\"allowance\");\n }\n\n if (tokenFuncs.length > 0) {\n // relax type to allow string[].includes(string)\n const matchedERC20Funcs: string[] = tokenFuncs;\n\n const erc20BalanceQuery: ERC20BalanceAllowanceQueryMatch = {\n queryKey: [\"readContract\"],\n exact: false,\n predicate: (query) => {\n const { queryKey } = query;\n // all queries that read Contract.<anything>\n if (isReadContractQueryKey(queryKey)) {\n if (\n queryKey[1].functionName &&\n matchedERC20Funcs.includes(queryKey[1].functionName)\n // all queries that read Contract.balanceOf or Contract.allowance\n ) {\n return true;\n }\n }\n return false;\n },\n };\n queries.push(erc20BalanceQuery);\n }\n\n if (nonces) {\n // relax type to allow string[].includes(string)\n const matchedNonceMethods: string[] = nonceMethods;\n\n const nonceQuery: NoncesQueryMatch = {\n queryKey: [\"readContracts\"],\n exact: false,\n predicate: (query) => {\n const { queryKey } = query;\n // all queries that read multiple Contract.<anything>\n if (isReadContractsQueryKey(queryKey)) {\n // we only ever use nonce methods with other nonce methods only,\n // no non-nonce methods mixed in\n const firstMethod = queryKey[1].contracts?.[0]?.functionName;\n if (firstMethod && matchedNonceMethods.includes(firstMethod)) {\n return true;\n }\n }\n return false;\n },\n };\n queries.push(nonceQuery);\n }\n\n if (queries.length > 0) {\n await Promise.all(\n queries.map((query) => queryClient.invalidateQueries(query))\n );\n }\n };\n"],"mappings":";;;;;AA8BA,SAASmB,EACPR,GACwE;AACxE,QAAOA,EAAS,OAAO;;AAezB,IAAMe,IAA8B;CAAC;CAAU;CAAW;CAAS;CAAW;AAE9E,SAASC,EACPhB,GAC+D;AAC/D,QAAOA,EAAS,OAAO;;AAezB,IAAaqB,KACVC,MACD,OAAO,EACLJ,eAAY,IACZC,eAAY,IACZC,YAAS,OACiB,EAAE,KAAK;CACjC,IAAMG,IAAmD,EAAE;AAE3D,CAAIJ,KAMFI,EAAQE,KALsC;EAE5CzB,UAAU,CAAC,UAAU;EACrBE,OAAO;EACR,CAC4B;CAK/B,IAAM0B,IAA0B,EAAE;AAQlC,KAPIT,KACFS,EAAWH,KAAK,YAAY,EAE1BP,KACFU,EAAWH,KAAK,YAAY,EAG1BG,EAAWC,SAAS,GAAG;EAEzB,IAAMC,IAA8BF;AAoBpCL,IAAQE,KAlBmD;GACzDzB,UAAU,CAAC,eAAe;GAC1BE,OAAO;GACPC,YAAYC,MAAU;IACpB,IAAM,EAAEJ,gBAAaI;AAWrB,WATA,GAAII,EAAuBR,EAAS,IAEhCA,EAAS,GAAGY,gBACZkB,EAAkBE,SAAShC,EAAS,GAAGY,aAAY;;GAQ1D,CAC8B;;AAGjC,KAAIQ,GAAQ;EAEV,IAAMa,IAAgClB;AAmBtCQ,IAAQE,KAjB6B;GACnCzB,UAAU,CAAC,gBAAgB;GAC3BE,OAAO;GACPC,YAAYC,MAAU;IACpB,IAAM,EAAEJ,gBAAaI;AAErB,QAAIY,EAAwBhB,EAAS,EAAE;KAGrC,IAAMmC,IAAcnC,EAAS,GAAGoC,YAAY,IAAIxB;AAChD,SAAIuB,KAAeF,EAAoBD,SAASG,EAAY,CAC1D,QAAO;;AAGX,WAAO;;GAEV,CACuB;;AAG1B,CAAIZ,EAAQM,SAAS,KACnB,MAAMQ,QAAQC,IACZf,EAAQgB,KAAKnC,MAAUkB,EAAYkB,kBAAkBpC,EAAM,CAC7D,CAAC"}
1
+ {"version":3,"file":"useInvalidateTokenData.js","names":["NonceMethod","Query","QueryClient","QueryKey","erc20Abi","Address","Config","ReadContractQueryKey","GetBalanceQueryKey","ReadContractsQueryKey","LooseQueryMatchToInvalidate","queryKey","Q","exact","predicate","query","ETHBalanceQueryMatch","ERC20BalanceQueryKey","ERC20BalanceAllowanceQueryMatch","isReadContractQueryKey","NoncesQueryKey","address","abi","functionName","args","NoncesQueryMatch","nonceMethods","isReadContractsQueryKey","TokenFuncsToInvalidate","allowance","balanceOf","nonces","invalidateBalancesAndAllowancesFactory","queryClient","queries","ethBalanceQuery","push","ERC20Func","NonNullable","tokenFuncs","length","matchedERC20Funcs","erc20BalanceQuery","includes","matchedNonceMethods","nonceQuery","firstMethod","contracts","Promise","all","map","invalidateQueries"],"sources":["../../../../src/hooks/tokens/balances/useInvalidateTokenData.ts"],"sourcesContent":["import type { NonceMethod } from \"@/hooks/permit/hooks/permit1/usePermit1Nonce\";\nimport { Query, QueryClient, type QueryKey } from \"@tanstack/react-query\";\n\nimport { erc20Abi, type Address } from \"viem\";\nimport { type Config } from \"wagmi\";\nimport {\n type ReadContractQueryKey,\n type GetBalanceQueryKey,\n type ReadContractsQueryKey,\n} from \"wagmi/query\";\n\ntype LooseQueryMatchToInvalidate<Q extends QueryKey> = {\n queryKey: [Q[0]];\n exact: false;\n predicate?: (query: Query) => boolean;\n};\n\ntype ETHBalanceQueryMatch = LooseQueryMatchToInvalidate<\n GetBalanceQueryKey<Config>\n>;\n\ntype ERC20BalanceQueryKey = ReadContractQueryKey<\n typeof erc20Abi,\n \"balanceOf\" | \"allowance\",\n [Address],\n Config\n>;\ntype ERC20BalanceAllowanceQueryMatch =\n LooseQueryMatchToInvalidate<ERC20BalanceQueryKey>;\n\nfunction isReadContractQueryKey(\n queryKey: QueryKey\n): queryKey is ReadContractQueryKey<unknown[], string, unknown[], Config> {\n return queryKey[0] === \"readContract\";\n}\n\ntype NoncesQueryKey = ReadContractsQueryKey<\n {\n address: Address;\n abi: typeof erc20Abi;\n functionName: NonceMethod;\n args: [Address];\n }[],\n boolean,\n Config\n>;\n\ntype NoncesQueryMatch = LooseQueryMatchToInvalidate<NoncesQueryKey>;\nconst nonceMethods: NonceMethod[] = [\"nonces\", \"_nonces\", \"nonce\", \"getNonce\"];\n\nfunction isReadContractsQueryKey(\n queryKey: QueryKey\n): queryKey is ReadContractsQueryKey<unknown[], boolean, Config> {\n return queryKey[0] === \"readContracts\";\n}\n\ntype TokenFuncsToInvalidate = {\n allowance?: boolean;\n balanceOf?: boolean;\n nonces?: boolean; // invalidate queries with Permit1 nonces,\n // Permit2 nonces can be safely incremented without syncing with what's on chain\n};\n/**\n * Helper function constructor to invalidate token-related query cache entries.\n * Used to refresh token balances and allowances after transactions that modify them.\n * Can selectively invalidate either balance or allowance queries, or both.\n * Invalidates for all tokens that have their queries currently mounted, which is easier than matching.\n */\nexport const invalidateBalancesAndAllowancesFactory =\n (queryClient: QueryClient) =>\n async ({\n allowance = true,\n balanceOf = true,\n nonces = false,\n }: TokenFuncsToInvalidate = {}) => {\n const queries: LooseQueryMatchToInvalidate<QueryKey>[] = [];\n\n if (balanceOf) {\n const ethBalanceQuery: ETHBalanceQueryMatch = {\n // easier to just match the queryKey base\n queryKey: [\"balance\"],\n exact: false,\n };\n queries.push(ethBalanceQuery);\n }\n\n type ERC20Func = NonNullable<ERC20BalanceQueryKey[1][\"functionName\"]>;\n\n const tokenFuncs: ERC20Func[] = [];\n if (balanceOf) {\n tokenFuncs.push(\"balanceOf\");\n }\n if (allowance) {\n tokenFuncs.push(\"allowance\");\n }\n\n if (tokenFuncs.length > 0) {\n // relax type to allow string[].includes(string)\n const matchedERC20Funcs: string[] = tokenFuncs;\n\n const erc20BalanceQuery: ERC20BalanceAllowanceQueryMatch = {\n queryKey: [\"readContract\"],\n exact: false,\n predicate: (query) => {\n const { queryKey } = query;\n // all queries that read Contract.<anything>\n if (isReadContractQueryKey(queryKey)) {\n if (\n queryKey[1].functionName &&\n matchedERC20Funcs.includes(queryKey[1].functionName)\n // all queries that read Contract.balanceOf or Contract.allowance\n ) {\n return true;\n }\n }\n return false;\n },\n };\n queries.push(erc20BalanceQuery);\n }\n\n if (nonces) {\n // relax type to allow string[].includes(string)\n const matchedNonceMethods: string[] = nonceMethods;\n\n const nonceQuery: NoncesQueryMatch = {\n queryKey: [\"readContracts\"],\n exact: false,\n predicate: (query) => {\n const { queryKey } = query;\n // all queries that read multiple Contract.<anything>\n if (isReadContractsQueryKey(queryKey)) {\n // we only ever use nonce methods with other nonce methods only,\n // no non-nonce methods mixed in\n const firstMethod = queryKey[1].contracts?.[0]?.functionName;\n if (firstMethod && matchedNonceMethods.includes(firstMethod)) {\n return true;\n }\n }\n return false;\n },\n };\n queries.push(nonceQuery);\n }\n\n if (queries.length > 0) {\n await Promise.all(\n queries.map((query) => queryClient.invalidateQueries(query))\n );\n }\n };\n"],"mappings":";;;;;AA8BA,SAASmB,EACPR,GACwE;CACxE,OAAOA,EAAS,OAAO;;AAezB,IAAMe,IAA8B;CAAC;CAAU;CAAW;CAAS;CAAW;AAE9E,SAASC,EACPhB,GAC+D;CAC/D,OAAOA,EAAS,OAAO;;AAezB,IAAaqB,KACVC,MACD,OAAO,EACLJ,eAAY,IACZC,eAAY,IACZC,YAAS,OACiB,EAAE,KAAK;CACjC,IAAMG,IAAmD,EAAE;CAE3D,AAAIJ,KAMFI,EAAQE,KAAKD;EAHXxB,UAAU,CAAC,UAAU;EACrBE,OAAO;EAEIsB,CAAgB;CAK/B,IAAMI,IAA0B,EAAE;CAQlC,IAPIT,KACFS,EAAWH,KAAK,YAAY,EAE1BP,KACFU,EAAWH,KAAK,YAAY,EAG1BG,EAAWC,SAAS,GAAG;EAEzB,IAAMC,IAA8BF;EAoBpCL,EAAQE,KAAKM;GAjBX/B,UAAU,CAAC,eAAe;GAC1BE,OAAO;GACPC,YAAYC,MAAU;IACpB,IAAM,EAAEJ,gBAAaI;IAWrB,OATA,GAAII,EAAuBR,EAAS,IAEhCA,EAAS,GAAGY,gBACZkB,EAAkBE,SAAShC,EAAS,GAAGY,aAAY;;GAS9CmB,CAAkB;;CAGjC,IAAIX,GAAQ;EAEV,IAAMa,IAAgClB;EAmBtCQ,EAAQE,KAAKS;GAhBXlC,UAAU,CAAC,gBAAgB;GAC3BE,OAAO;GACPC,YAAYC,MAAU;IACpB,IAAM,EAAEJ,gBAAaI;IAErB,IAAIY,EAAwBhB,EAAS,EAAE;KAGrC,IAAMmC,IAAcnC,EAAS,GAAGoC,YAAY,IAAIxB;KAChD,IAAIuB,KAAeF,EAAoBD,SAASG,EAAY,EAC1D,OAAO;;IAGX,OAAO;;GAGED,CAAW;;CAG1B,AAAIX,EAAQM,SAAS,KACnB,MAAMQ,QAAQC,IACZf,EAAQgB,KAAKnC,MAAUkB,EAAYkB,kBAAkBpC,EAAM,CAC7D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useIsInsufficientTokenBalance.js","names":["useAccount","useTokenBalance","Token","useAtomValue","amountAfterSlippage","useSwapSide","useSlippage","TradeMode","MEDIUM_STALE_TIME_FOR_REACTIVENESS","tradeModeToPayAmountWeiAtom","tradeModeToTokenAtoms","useIsInsufficientTokenBalance","token","requiredBalanceWei","address","account","balance","queryOptions","refetchInterval","undefined","BigInt","useIsTokenFromInsufficientBalance","tradeMode","$","_c","tokenFromAtom","payAmountWeiAtom","tokenFrom","payAmountWei","swapSide","resolvedSlippage","t0","toFixed","requiredBalanceAfterPossibleSlippage","t1"],"sources":["../../../../src/hooks/tokens/balances/useIsInsufficientTokenBalance.ts"],"sourcesContent":["import { useAccount } from \"wagmi\";\nimport { useTokenBalance } from \"./useTokenBalance\";\nimport type { Token } from \"@/tokens/state/types\";\nimport { useAtomValue } from \"@/core/store\";\nimport { amountAfterSlippage } from \"@/lib/utils/slippage\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { type TradeMode } from \"@/core/state/tradeModeAtom\";\nimport { MEDIUM_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\nimport {\n tradeModeToPayAmountWeiAtom,\n tradeModeToTokenAtoms,\n} from \"@/core/inputs/state/common\";\n\nexport const useIsInsufficientTokenBalance = ({\n token,\n requiredBalanceWei,\n}: {\n token?: Token;\n requiredBalanceWei?: string;\n}) => {\n const { address: account } = useAccount();\n const { balance } = useTokenBalance({\n token,\n queryOptions: { refetchInterval: MEDIUM_STALE_TIME_FOR_REACTIVENESS },\n });\n\n if (\n requiredBalanceWei === undefined ||\n balance === undefined ||\n !token ||\n !account\n )\n return false;\n\n return balance === 0n || balance < BigInt(requiredBalanceWei);\n};\n\nexport const useIsTokenFromInsufficientBalance = (tradeMode: TradeMode) => {\n const tokenFromAtom = tradeModeToTokenAtoms[tradeMode].tokenFromAtom;\n const payAmountWeiAtom = tradeModeToPayAmountWeiAtom[tradeMode];\n\n const tokenFrom = useAtomValue(tokenFromAtom);\n const payAmountWei = useAtomValue(payAmountWeiAtom);\n\n const swapSide = useSwapSide();\n const { resolvedSlippage } = useSlippage(tradeMode);\n\n const requiredBalanceAfterPossibleSlippage =\n swapSide === \"BUY\"\n ? // payAmount + slippage for BUY\n amountAfterSlippage(payAmountWei, resolvedSlippage, swapSide).toFixed(0)\n : // raw payAmount for SELL\n payAmountWei;\n\n return useIsInsufficientTokenBalance({\n token: tokenFrom,\n requiredBalanceWei: requiredBalanceAfterPossibleSlippage,\n });\n};\n"],"mappings":";;;;;;;;;;AAcA,IAAaW,KAAiC,EAC5CC,UACAC,4BAII;CACJ,IAAM,EAAEC,SAASC,MAAYf,GAAY,EACnC,EAAEgB,eAAYf,EAAgB;EAClCW;EACAK,cAAc,EAAEC,iBAAiBV,GAAmC;EACrE,CAAC;AAUF,QAPEK,MAAuBM,KAAAA,KACvBH,MAAYG,KAAAA,KACZ,CAACP,KACD,CAACG,IAEM,KAEFC,MAAY,MAAMA,IAAUI,OAAOP,EAAmB;GAGlDQ,KAAoCC,MAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAC/CC,IAAsBf,EAAsBY,GAAUG,eACtDC,IAAyBjB,EAA4Ba,IAErDK,IAAkBxB,EAAasB,EAAc,EAC7CG,IAAqBzB,EAAauB,EAAiB,EAEnDG,IAAiBxB,GAAa,EAC9B,EAAAyB,wBAA6BxB,EAAYgB,EAAU,EAACS;AAAA,CAAAR,EAAA,OAAAK,KAAAL,EAAA,OAAAO,KAAAP,EAAA,OAAAM,KAGlDE,IAAAF,MAAa,QAETzB,EAAoBwB,GAAcE,GAAkBD,EAAS,CAAAG,QAAS,EAE1D,GAJhBJ,GAIgBL,EAAA,KAAAK,GAAAL,EAAA,KAAAO,GAAAP,EAAA,KAAAM,GAAAN,EAAA,KAAAQ,KAAAA,IAAAR,EAAA;CALlB,IAAAU,IACEF,GAIiBG;AAKlB,QALkBX,EAAA,OAAAU,KAAAV,EAAA,OAAAI,KAEkBO,IAAA;EAAAtB,OAC5Be;EAASd,oBACIoB;EACrB,EAAAV,EAAA,KAAAU,GAAAV,EAAA,KAAAI,GAAAJ,EAAA,KAAAW,KAAAA,IAAAX,EAAA,IAHMZ,EAA8BuB,EAGnC"}
1
+ {"version":3,"file":"useIsInsufficientTokenBalance.js","names":["useAccount","useTokenBalance","Token","useAtomValue","amountAfterSlippage","useSwapSide","useSlippage","TradeMode","MEDIUM_STALE_TIME_FOR_REACTIVENESS","tradeModeToPayAmountWeiAtom","tradeModeToTokenAtoms","useIsInsufficientTokenBalance","token","requiredBalanceWei","address","account","balance","queryOptions","refetchInterval","undefined","BigInt","useIsTokenFromInsufficientBalance","tradeMode","$","_c","tokenFromAtom","payAmountWeiAtom","tokenFrom","payAmountWei","swapSide","resolvedSlippage","t0","toFixed","requiredBalanceAfterPossibleSlippage","t1"],"sources":["../../../../src/hooks/tokens/balances/useIsInsufficientTokenBalance.ts"],"sourcesContent":["import { useAccount } from \"wagmi\";\nimport { useTokenBalance } from \"./useTokenBalance\";\nimport type { Token } from \"@/tokens/state/types\";\nimport { useAtomValue } from \"@/core/store\";\nimport { amountAfterSlippage } from \"@/lib/utils/slippage\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { type TradeMode } from \"@/core/state/tradeModeAtom\";\nimport { MEDIUM_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\nimport {\n tradeModeToPayAmountWeiAtom,\n tradeModeToTokenAtoms,\n} from \"@/core/inputs/state/common\";\n\nexport const useIsInsufficientTokenBalance = ({\n token,\n requiredBalanceWei,\n}: {\n token?: Token;\n requiredBalanceWei?: string;\n}) => {\n const { address: account } = useAccount();\n const { balance } = useTokenBalance({\n token,\n queryOptions: { refetchInterval: MEDIUM_STALE_TIME_FOR_REACTIVENESS },\n });\n\n if (\n requiredBalanceWei === undefined ||\n balance === undefined ||\n !token ||\n !account\n )\n return false;\n\n return balance === 0n || balance < BigInt(requiredBalanceWei);\n};\n\nexport const useIsTokenFromInsufficientBalance = (tradeMode: TradeMode) => {\n const tokenFromAtom = tradeModeToTokenAtoms[tradeMode].tokenFromAtom;\n const payAmountWeiAtom = tradeModeToPayAmountWeiAtom[tradeMode];\n\n const tokenFrom = useAtomValue(tokenFromAtom);\n const payAmountWei = useAtomValue(payAmountWeiAtom);\n\n const swapSide = useSwapSide();\n const { resolvedSlippage } = useSlippage(tradeMode);\n\n const requiredBalanceAfterPossibleSlippage =\n swapSide === \"BUY\"\n ? // payAmount + slippage for BUY\n amountAfterSlippage(payAmountWei, resolvedSlippage, swapSide).toFixed(0)\n : // raw payAmount for SELL\n payAmountWei;\n\n return useIsInsufficientTokenBalance({\n token: tokenFrom,\n requiredBalanceWei: requiredBalanceAfterPossibleSlippage,\n });\n};\n"],"mappings":";;;;;;;;;;AAcA,IAAaW,KAAiC,EAC5CC,UACAC,4BAII;CACJ,IAAM,EAAEC,SAASC,MAAYf,GAAY,EACnC,EAAEgB,eAAYf,EAAgB;EAClCW;EACAK,cAAc,EAAEC,iBAAiBV,GAAmC;EACrE,CAAC;CAUF,OAPEK,MAAuBM,KAAAA,KACvBH,MAAYG,KAAAA,KACZ,CAACP,KACD,CAACG,IAEM,KAEFC,MAAY,MAAMA,IAAUI,OAAOP,EAAmB;GAGlDQ,KAAoCC,MAAA;CAAA,IAAAC,IAAAC,EAAA,EAAA,EAC/CC,IAAsBf,EAAsBY,GAAUG,eACtDC,IAAyBjB,EAA4Ba,IAErDK,IAAkBxB,EAAasB,EAAc,EAC7CG,IAAqBzB,EAAauB,EAAiB,EAEnDG,IAAiBxB,GAAa,EAC9B,EAAAyB,wBAA6BxB,EAAYgB,EAAU,EAACS;CAAA,AAAAR,EAAA,OAAAK,KAAAL,EAAA,OAAAO,KAAAP,EAAA,OAAAM,KAGlDE,IAAAF,MAAa,QAETzB,EAAoBwB,GAAcE,GAAkBD,EAAS,CAAAG,QAAS,EAE1D,GAJhBJ,GAIgBL,EAAA,KAAAK,GAAAL,EAAA,KAAAO,GAAAP,EAAA,KAAAM,GAAAN,EAAA,KAAAQ,KAAAA,IAAAR,EAAA;CALlB,IAAAU,IACEF,GAIiBG;CAKlB,OALkBX,EAAA,OAAAU,KAAAV,EAAA,OAAAI,KAEkBO,IAAA;EAAAtB,OAC5Be;EAASd,oBACIoB;EACrB,EAAAV,EAAA,KAAAU,GAAAV,EAAA,KAAAI,GAAAJ,EAAA,KAAAW,KAAAA,IAAAX,EAAA,IAHMZ,EAA8BuB,EAGnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useIsLimitOrderInsufficientBalance.js","names":["useAtomValue","formatUnits","useIsInsufficientTokenBalance","useLimitOrderRequiredBalance","LONG_STALE_TIME_FOR_REACTIVENESS","useOtcTokenFrom","otcPayInputAmountWeiAtom","useLimitTokenFrom","limitPayInputAmountWeiAtom","useDeltaLimitOrderRequiredBalance","Token","useIsInsufficientBalanceToFillLimitOrder","$","_c","tokenFrom","payAmountWei","t0","Symbol","for","staleTime","t1","address","tokenAddress","query","data","t2","toLowerCase","requiredBalanceToFillWei","t3","useIsInsufficientBalanceToFillOrder","useIsInsufficientBalanceToFillOtcOrder","token","requiredBalanceWei","isInsufficientBalance","BigInt","toString","undefined","isInsufficientBalanceToFill","t4","decimals","requiredBalanceToFillUnit","t5"],"sources":["../../../../src/hooks/tokens/balances/useIsLimitOrderInsufficientBalance.ts"],"sourcesContent":["import { useAtomValue } from \"@/core/store\";\nimport { formatUnits } from \"viem\";\n\nimport { useIsInsufficientTokenBalance } from \"./useIsInsufficientTokenBalance\";\nimport { useLimitOrderRequiredBalance } from \"@/hooks/otc/queries/useLimitOrderRequiredBalance\";\nimport { LONG_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\n\nimport { useOtcTokenFrom } from \"@/core/otc/state/selectedTokenAtom\";\nimport { otcPayInputAmountWeiAtom } from \"@/core/otc/state/otcInputAmountAtom\";\n\nimport { useLimitTokenFrom } from \"@/core/limit/state/limitTokenAtoms\";\nimport { limitPayInputAmountWeiAtom } from \"@/core/limit/state/limitInputAmountAtom\";\nimport { useDeltaLimitOrderRequiredBalance } from \"@/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance\";\nimport type { Token } from \"@/tokens/state/types\";\n\nexport const useIsInsufficientBalanceToFillLimitOrder = () => {\n const tokenFrom = useLimitTokenFrom();\n const payAmountWei = useAtomValue(limitPayInputAmountWeiAtom);\n\n const { data } = useDeltaLimitOrderRequiredBalance({\n tokenAddress: tokenFrom.address,\n query: { staleTime: LONG_STALE_TIME_FOR_REACTIVENESS },\n });\n\n const requiredBalanceToFillWei = data?.[tokenFrom.address.toLowerCase()];\n\n return useIsInsufficientBalanceToFillOrder({\n tokenFrom,\n payAmountWei,\n requiredBalanceToFillWei,\n });\n};\n\nexport const useIsInsufficientBalanceToFillOtcOrder = () => {\n const tokenFrom = useOtcTokenFrom();\n const payAmountWei = useAtomValue(otcPayInputAmountWeiAtom);\n\n const { data } = useLimitOrderRequiredBalance({\n tokenAddress: tokenFrom.address,\n query: { staleTime: LONG_STALE_TIME_FOR_REACTIVENESS },\n });\n\n const requiredBalanceToFillWei = data?.[tokenFrom.address.toLowerCase()];\n\n return useIsInsufficientBalanceToFillOrder({\n tokenFrom,\n payAmountWei,\n requiredBalanceToFillWei,\n });\n};\n\nexport const useIsInsufficientBalanceToFillOrder = ({\n tokenFrom,\n payAmountWei,\n requiredBalanceToFillWei,\n}: {\n tokenFrom: Token;\n payAmountWei: string;\n requiredBalanceToFillWei?: string;\n}) => {\n const isInsufficientBalance = useIsInsufficientTokenBalance({\n token: tokenFrom,\n requiredBalanceWei: payAmountWei,\n });\n\n const isInsufficientBalanceToFill = useIsInsufficientTokenBalance({\n token: tokenFrom,\n requiredBalanceWei:\n requiredBalanceToFillWei && requiredBalanceToFillWei !== \"0\"\n ? (BigInt(payAmountWei) + BigInt(requiredBalanceToFillWei)).toString()\n : undefined,\n });\n\n const requiredBalanceToFillUnit =\n isInsufficientBalanceToFill && requiredBalanceToFillWei\n ? formatUnits(BigInt(requiredBalanceToFillWei), tokenFrom.decimals)\n : undefined;\n\n return {\n isInsufficientBalance,\n isInsufficientBalanceToFill,\n requiredBalanceToFillWei,\n requiredBalanceToFillUnit,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"useIsLimitOrderInsufficientBalance.js","names":["useAtomValue","formatUnits","useIsInsufficientTokenBalance","useLimitOrderRequiredBalance","LONG_STALE_TIME_FOR_REACTIVENESS","useOtcTokenFrom","otcPayInputAmountWeiAtom","useLimitTokenFrom","limitPayInputAmountWeiAtom","useDeltaLimitOrderRequiredBalance","Token","useIsInsufficientBalanceToFillLimitOrder","$","_c","tokenFrom","payAmountWei","t0","Symbol","for","staleTime","t1","address","tokenAddress","query","data","t2","toLowerCase","requiredBalanceToFillWei","t3","useIsInsufficientBalanceToFillOrder","useIsInsufficientBalanceToFillOtcOrder","token","requiredBalanceWei","isInsufficientBalance","BigInt","toString","undefined","isInsufficientBalanceToFill","t4","decimals","requiredBalanceToFillUnit","t5"],"sources":["../../../../src/hooks/tokens/balances/useIsLimitOrderInsufficientBalance.ts"],"sourcesContent":["import { useAtomValue } from \"@/core/store\";\nimport { formatUnits } from \"viem\";\n\nimport { useIsInsufficientTokenBalance } from \"./useIsInsufficientTokenBalance\";\nimport { useLimitOrderRequiredBalance } from \"@/hooks/otc/queries/useLimitOrderRequiredBalance\";\nimport { LONG_STALE_TIME_FOR_REACTIVENESS } from \"@/lib/constants/time\";\n\nimport { useOtcTokenFrom } from \"@/core/otc/state/selectedTokenAtom\";\nimport { otcPayInputAmountWeiAtom } from \"@/core/otc/state/otcInputAmountAtom\";\n\nimport { useLimitTokenFrom } from \"@/core/limit/state/limitTokenAtoms\";\nimport { limitPayInputAmountWeiAtom } from \"@/core/limit/state/limitInputAmountAtom\";\nimport { useDeltaLimitOrderRequiredBalance } from \"@/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance\";\nimport type { Token } from \"@/tokens/state/types\";\n\nexport const useIsInsufficientBalanceToFillLimitOrder = () => {\n const tokenFrom = useLimitTokenFrom();\n const payAmountWei = useAtomValue(limitPayInputAmountWeiAtom);\n\n const { data } = useDeltaLimitOrderRequiredBalance({\n tokenAddress: tokenFrom.address,\n query: { staleTime: LONG_STALE_TIME_FOR_REACTIVENESS },\n });\n\n const requiredBalanceToFillWei = data?.[tokenFrom.address.toLowerCase()];\n\n return useIsInsufficientBalanceToFillOrder({\n tokenFrom,\n payAmountWei,\n requiredBalanceToFillWei,\n });\n};\n\nexport const useIsInsufficientBalanceToFillOtcOrder = () => {\n const tokenFrom = useOtcTokenFrom();\n const payAmountWei = useAtomValue(otcPayInputAmountWeiAtom);\n\n const { data } = useLimitOrderRequiredBalance({\n tokenAddress: tokenFrom.address,\n query: { staleTime: LONG_STALE_TIME_FOR_REACTIVENESS },\n });\n\n const requiredBalanceToFillWei = data?.[tokenFrom.address.toLowerCase()];\n\n return useIsInsufficientBalanceToFillOrder({\n tokenFrom,\n payAmountWei,\n requiredBalanceToFillWei,\n });\n};\n\nexport const useIsInsufficientBalanceToFillOrder = ({\n tokenFrom,\n payAmountWei,\n requiredBalanceToFillWei,\n}: {\n tokenFrom: Token;\n payAmountWei: string;\n requiredBalanceToFillWei?: string;\n}) => {\n const isInsufficientBalance = useIsInsufficientTokenBalance({\n token: tokenFrom,\n requiredBalanceWei: payAmountWei,\n });\n\n const isInsufficientBalanceToFill = useIsInsufficientTokenBalance({\n token: tokenFrom,\n requiredBalanceWei:\n requiredBalanceToFillWei && requiredBalanceToFillWei !== \"0\"\n ? (BigInt(payAmountWei) + BigInt(requiredBalanceToFillWei)).toString()\n : undefined,\n });\n\n const requiredBalanceToFillUnit =\n isInsufficientBalanceToFill && requiredBalanceToFillWei\n ? formatUnits(BigInt(requiredBalanceToFillWei), tokenFrom.decimals)\n : undefined;\n\n return {\n isInsufficientBalance,\n isInsufficientBalanceToFill,\n requiredBalanceToFillWei,\n requiredBalanceToFillUnit,\n };\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMultichainTokenBalances.js","names":["SupportedChainId","useQueries","isAddress","Address","useAccount","constructTokenBalancesQueryOptions","AddressBalanceMap","assert","isSupportedChainId","useAllTokensListsFetched","useMultiChainTokenBalances","t0","$","_c","addressesMap","select","intent","t1","undefined","address","account","allTokensListsFetched","enabled","t2","queries","Object","entries","map","t3","_chainId","addresses","validAddressesLowerCase","_temp","filter","_temp2","chainId","Number","keys","join","tokenAddressesLowercase","queriesResult","t4","acc","queryResult","index","data","chainId_0","reduce","toLowerCase","Lowercase","address_0"],"sources":["../../../../src/hooks/tokens/balances/useMultichainTokenBalances.ts"],"sourcesContent":["import type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport { isAddress, type Address } from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport { constructTokenBalancesQueryOptions } from \"./queries\";\nimport type { AddressBalanceMap } from \"./types\";\nimport { assert } from \"ts-essentials\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { useAllTokensListsFetched } from \"@/tokens/lists/state/effects\";\n\nexport const useMultiChainTokenBalances = <TData>({\n addressesMap,\n select,\n intent = \"fetch\",\n}: {\n addressesMap: Partial<Record<SupportedChainId, string[]>>;\n select?: (data: AddressBalanceMap) => TData;\n intent?: \"fetch\" | \"prefetch\";\n}) => {\n const { address: account } = useAccount();\n\n const allTokensListsFetched = useAllTokensListsFetched();\n\n // don't prefetch until we know all the tokens from tokenLists are fetched,\n // to avoid re-running token balances fetch for incomplete token sets\n const enabled = intent === \"prefetch\" ? allTokensListsFetched : true;\n\n const queriesResult = useQueries({\n queries: Object.entries(addressesMap).map(([_chainId, addresses]) => {\n const validAddressesLowerCase = addresses\n .map((address) => address.toLowerCase() as Lowercase<string>)\n .filter((address): address is Lowercase<Address> => isAddress(address));\n\n const chainId = Number(_chainId);\n\n // Object.entries destroyed the types.\n // should not happen, but to satisfy TypeScript:\n assert(\n isSupportedChainId(chainId),\n `chainId ${chainId} is not supported; rest chainIds: ${Object.keys(addressesMap).join(\", \")}`\n );\n\n return constructTokenBalancesQueryOptions({\n tokenAddressesLowercase: validAddressesLowerCase,\n chainId,\n account: account,\n select,\n enabled,\n });\n }),\n });\n\n return queriesResult.reduce<Record<number, AddressBalanceMap>>(\n (acc, queryResult, index) => {\n if (queryResult.data) {\n const chainId = Object.keys(addressesMap)[index];\n acc[Number(chainId)] = queryResult.data;\n }\n return acc;\n },\n {}\n );\n};\n"],"mappings":";;;;;;;;;AAUA,IAAaU,KAA6BC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAQ,EAAAC,iBAAAC,WAAAC,QAAAC,MAAAN,GAGhDK,IAAAC,MAAAC,KAAAA,IAAA,UAAAD,GAMA,EAAAE,SAAAC,MAA6BhB,GAAY,EAEzCiB,IAA8BZ,GAA0B,EAIxDa,IAAgBN,MAAW,aAAXK,IAAA,IAAqDE;AAAA,CAAAX,EAAA,OAAAQ,KAAAR,EAAA,OAAAE,KAAAF,EAAA,OAAAU,KAAAV,EAAA,OAAAG,KAEpCQ,IAAA,EAAAC,SACtBC,OAAMC,QAASZ,EAAa,CAAAa,KAAKC,MAAA;EAAC,IAAA,CAAAC,GAAAC,KAAAF,GACzCG,IAAgCD,EAASH,IAClCK,EAAwD,CAAAC,OACrDC,EAA+D,EAEzEC,IAAgBC,OAAOP,EAAS;AAO/B,SAHDtB,EACEC,EAAmB2B,EAAQ,EAC3B,WAAWA,EAAO,oCAAqCV,OAAMY,KAAMvB,EAAa,CAAAwB,KAAM,KAAK,GAC5F,EAEMjC,EAAmC;GAAAkC,yBACfR;GAAuBI;GAAAf;GAAAL;GAAAO;GAKjD,CAAC;GACH,EACF,EAAAV,EAAA,KAAAQ,GAAAR,EAAA,KAAAE,GAAAF,EAAA,KAAAU,GAAAV,EAAA,KAAAG,GAAAH,EAAA,KAAAW,KAAAA,IAAAX,EAAA;CAvBD,IAAA4B,IAAsBvC,EAAWsB,EAuB/B,EAACK;AAAA,KAAAhB,EAAA,OAAAE,KAAAF,EAAA,OAAA4B,GAAA;EAAA,IAAAC;AAWF7B,EAXEA,EAAA,OAAAE,IASA2B,IAAA7B,EAAA,MAND6B,KAAAC,GAAAC,GAAAC,MAAA;AACE,OAAID,EAAWE,MAAK;IAClB,IAAAC,IAAgBrB,OAAMY,KAAMvB,EAAa,CAAC8B;AAC1CF,MAAIN,OAAOD,EAAQ,IAAIQ,EAAWE;;AACnC,UACMH;KACR9B,EAAA,KAAAE,GAAAF,EAAA,KAAA6B,IAPIb,IAAAY,EAAaO,OAClBN,GAOA,EACF,CAAC,EAAA7B,EAAA,KAAAE,GAAAF,EAAA,KAAA4B,GAAA5B,EAAA,KAAAgB;OAAAA,KAAAhB,EAAA;AAAA,QATMgB;;AA1CiC,SAAAI,EAAAb,GAAA;AAAA,QAoBhBA,EAAO6B,aAAc;;AApBL,SAAAd,EAAAgB,GAAA;AAAA,QAqBkBhD,EAAUiB,EAAQ"}
1
+ {"version":3,"file":"useMultichainTokenBalances.js","names":["SupportedChainId","useQueries","isAddress","Address","useAccount","constructTokenBalancesQueryOptions","AddressBalanceMap","assert","isSupportedChainId","useAllTokensListsFetched","useMultiChainTokenBalances","t0","$","_c","addressesMap","select","intent","t1","undefined","address","account","allTokensListsFetched","enabled","t2","queries","Object","entries","map","t3","_chainId","addresses","validAddressesLowerCase","_temp","filter","_temp2","chainId","Number","keys","join","tokenAddressesLowercase","queriesResult","t4","acc","queryResult","index","data","chainId_0","reduce","toLowerCase","Lowercase","address_0"],"sources":["../../../../src/hooks/tokens/balances/useMultichainTokenBalances.ts"],"sourcesContent":["import type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport { isAddress, type Address } from \"viem\";\nimport { useAccount } from \"wagmi\";\nimport { constructTokenBalancesQueryOptions } from \"./queries\";\nimport type { AddressBalanceMap } from \"./types\";\nimport { assert } from \"ts-essentials\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { useAllTokensListsFetched } from \"@/tokens/lists/state/effects\";\n\nexport const useMultiChainTokenBalances = <TData>({\n addressesMap,\n select,\n intent = \"fetch\",\n}: {\n addressesMap: Partial<Record<SupportedChainId, string[]>>;\n select?: (data: AddressBalanceMap) => TData;\n intent?: \"fetch\" | \"prefetch\";\n}) => {\n const { address: account } = useAccount();\n\n const allTokensListsFetched = useAllTokensListsFetched();\n\n // don't prefetch until we know all the tokens from tokenLists are fetched,\n // to avoid re-running token balances fetch for incomplete token sets\n const enabled = intent === \"prefetch\" ? allTokensListsFetched : true;\n\n const queriesResult = useQueries({\n queries: Object.entries(addressesMap).map(([_chainId, addresses]) => {\n const validAddressesLowerCase = addresses\n .map((address) => address.toLowerCase() as Lowercase<string>)\n .filter((address): address is Lowercase<Address> => isAddress(address));\n\n const chainId = Number(_chainId);\n\n // Object.entries destroyed the types.\n // should not happen, but to satisfy TypeScript:\n assert(\n isSupportedChainId(chainId),\n `chainId ${chainId} is not supported; rest chainIds: ${Object.keys(addressesMap).join(\", \")}`\n );\n\n return constructTokenBalancesQueryOptions({\n tokenAddressesLowercase: validAddressesLowerCase,\n chainId,\n account: account,\n select,\n enabled,\n });\n }),\n });\n\n return queriesResult.reduce<Record<number, AddressBalanceMap>>(\n (acc, queryResult, index) => {\n if (queryResult.data) {\n const chainId = Object.keys(addressesMap)[index];\n acc[Number(chainId)] = queryResult.data;\n }\n return acc;\n },\n {}\n );\n};\n"],"mappings":";;;;;;;;;AAUA,IAAaU,KAA6BC,MAAA;CAAA,IAAAC,IAAAC,EAAA,GAAA,EAAQ,EAAAC,iBAAAC,WAAAC,QAAAC,MAAAN,GAGhDK,IAAAC,MAAAC,KAAAA,IAAA,UAAAD,GAMA,EAAAE,SAAAC,MAA6BhB,GAAY,EAEzCiB,IAA8BZ,GAA0B,EAIxDa,IAAgBN,MAAW,aAAXK,IAAA,IAAqDE;CAAA,AAAAX,EAAA,OAAAQ,KAAAR,EAAA,OAAAE,KAAAF,EAAA,OAAAU,KAAAV,EAAA,OAAAG,KAEpCQ,IAAA,EAAAC,SACtBC,OAAMC,QAASZ,EAAa,CAAAa,KAAKC,MAAA;EAAC,IAAA,CAAAC,GAAAC,KAAAF,GACzCG,IAAgCD,EAASH,IAClCK,EAAwD,CAAAC,OACrDC,EAA+D,EAEzEC,IAAgBC,OAAOP,EAAS;EAO/B,OAHDtB,EACEC,EAAmB2B,EAAQ,EAC3B,WAAWA,EAAO,oCAAqCV,OAAMY,KAAMvB,EAAa,CAAAwB,KAAM,KAAK,GAC5F,EAEMjC,EAAmC;GAAAkC,yBACfR;GAAuBI;GAAAf;GAAAL;GAAAO;GAKjD,CAAC;GACH,EACF,EAAAV,EAAA,KAAAQ,GAAAR,EAAA,KAAAE,GAAAF,EAAA,KAAAU,GAAAV,EAAA,KAAAG,GAAAH,EAAA,KAAAW,KAAAA,IAAAX,EAAA;CAvBD,IAAA4B,IAAsBvC,EAAWsB,EAuB/B,EAACK;CAAA,IAAAhB,EAAA,OAAAE,KAAAF,EAAA,OAAA4B,GAAA;EAAA,IAAAC;EAWF7B,AAXEA,EAAA,OAAAE,IASA2B,IAAA7B,EAAA,MAND6B,KAAAC,GAAAC,GAAAC,MAAA;GACE,IAAID,EAAWE,MAAK;IAClB,IAAAC,IAAgBrB,OAAMY,KAAMvB,EAAa,CAAC8B;IAC1CF,EAAIN,OAAOD,EAAQ,IAAIQ,EAAWE;;GACnC,OACMH;KACR9B,EAAA,KAAAE,GAAAF,EAAA,KAAA6B,IAPIb,IAAAY,EAAaO,OAClBN,GAOA,EACF,CAAC,EAAA7B,EAAA,KAAAE,GAAAF,EAAA,KAAA4B,GAAA5B,EAAA,KAAAgB;QAAAA,IAAAhB,EAAA;CAAA,OATMgB;;AA1CiC,SAAAI,EAAAb,GAAA;CAAA,OAoBhBA,EAAO6B,aAAc;;AApBL,SAAAd,EAAAgB,GAAA;CAAA,OAqBkBhD,EAAUiB,EAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSelectedTokenBalances.js","names":["useWidgetTokens","useTokenBalance","SupportedChainId","useMemo","TradeMode","BalancesMapByNetwork","Record","useSelectedTokenBalances","tradeMode","Partial","tokenFrom","tokenTo","balance","tokenFromBalance","token","tokenToBalance","balances","network","address","toLowerCase"],"sources":["../../../../src/hooks/tokens/balances/useSelectedTokenBalances.ts"],"sourcesContent":["import { useWidgetTokens } from \"@/core/inputs/state/common\";\nimport { useTokenBalance } from \"./useTokenBalance\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useMemo } from \"react\";\nimport type { TradeMode } from \"@/core/state/tradeModeAtom\";\n\ntype BalancesMapByNetwork = Record<\n SupportedChainId,\n Record<string, bigint | undefined>\n>;\n\nexport function useSelectedTokenBalances(\n tradeMode: TradeMode\n): Partial<BalancesMapByNetwork> {\n const { tokenFrom, tokenTo } = useWidgetTokens(tradeMode);\n\n const { balance: tokenFromBalance } = useTokenBalance({ token: tokenFrom });\n const { balance: tokenToBalance } = useTokenBalance({ token: tokenTo });\n\n const balances = useMemo(() => {\n const balances = {\n [tokenFrom.network]: {\n [tokenFrom.address.toLowerCase()]: tokenFromBalance,\n },\n };\n\n if (tokenTo) {\n balances[tokenTo.network] = {\n ...balances[tokenTo.network],\n [tokenTo.address.toLowerCase()]: tokenToBalance,\n };\n }\n\n return balances;\n }, [\n tokenFrom.address,\n tokenFrom.network,\n tokenFromBalance,\n tokenTo,\n tokenToBalance,\n ]);\n\n return balances;\n}\n"],"mappings":";;;;AAWA,SAAgBO,EACdC,GAC+B;CAC/B,IAAM,EAAEE,cAAWC,eAAYX,EAAgBQ,EAAU,EAEnD,EAAEI,SAASC,MAAqBZ,EAAgB,EAAEa,OAAOJ,GAAW,CAAC,EACrE,EAAEE,SAASG,MAAmBd,EAAgB,EAAEa,OAAOH,GAAS,CAAC;AAyBvE,QAvBiBR,QAAc;EAC7B,IAAMa,IAAW,GACdN,EAAUO,UAAU,GAClBP,EAAUQ,QAAQC,aAAa,GAAGN,GACrC,EACD;AASD,SAPIF,MACFK,EAASL,EAAQM,WAAW;GAC1B,GAAGD,EAASL,EAAQM;IACnBN,EAAQO,QAAQC,aAAa,GAAGJ;GAClC,GAGIC;IACN;EACDN,EAAUQ;EACVR,EAAUO;EACVJ;EACAF;EACAI;EACD,CAAC"}
1
+ {"version":3,"file":"useSelectedTokenBalances.js","names":["useWidgetTokens","useTokenBalance","SupportedChainId","useMemo","TradeMode","BalancesMapByNetwork","Record","useSelectedTokenBalances","tradeMode","Partial","tokenFrom","tokenTo","balance","tokenFromBalance","token","tokenToBalance","balances","network","address","toLowerCase"],"sources":["../../../../src/hooks/tokens/balances/useSelectedTokenBalances.ts"],"sourcesContent":["import { useWidgetTokens } from \"@/core/inputs/state/common\";\nimport { useTokenBalance } from \"./useTokenBalance\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { useMemo } from \"react\";\nimport type { TradeMode } from \"@/core/state/tradeModeAtom\";\n\ntype BalancesMapByNetwork = Record<\n SupportedChainId,\n Record<string, bigint | undefined>\n>;\n\nexport function useSelectedTokenBalances(\n tradeMode: TradeMode\n): Partial<BalancesMapByNetwork> {\n const { tokenFrom, tokenTo } = useWidgetTokens(tradeMode);\n\n const { balance: tokenFromBalance } = useTokenBalance({ token: tokenFrom });\n const { balance: tokenToBalance } = useTokenBalance({ token: tokenTo });\n\n const balances = useMemo(() => {\n const balances = {\n [tokenFrom.network]: {\n [tokenFrom.address.toLowerCase()]: tokenFromBalance,\n },\n };\n\n if (tokenTo) {\n balances[tokenTo.network] = {\n ...balances[tokenTo.network],\n [tokenTo.address.toLowerCase()]: tokenToBalance,\n };\n }\n\n return balances;\n }, [\n tokenFrom.address,\n tokenFrom.network,\n tokenFromBalance,\n tokenTo,\n tokenToBalance,\n ]);\n\n return balances;\n}\n"],"mappings":";;;;AAWA,SAAgBO,EACdC,GAC+B;CAC/B,IAAM,EAAEE,cAAWC,eAAYX,EAAgBQ,EAAU,EAEnD,EAAEI,SAASC,MAAqBZ,EAAgB,EAAEa,OAAOJ,GAAW,CAAC,EACrE,EAAEE,SAASG,MAAmBd,EAAgB,EAAEa,OAAOH,GAAS,CAAC;CAyBvE,OAvBiBR,QAAc;EAC7B,IAAMa,IAAW,GACdN,EAAUO,UAAU,GAClBP,EAAUQ,QAAQC,aAAa,GAAGN,GACrC,EACD;EASD,OAPIF,MACFK,EAASL,EAAQM,WAAW;GAC1B,GAAGD,EAASL,EAAQM;IACnBN,EAAQO,QAAQC,aAAa,GAAGJ;GAClC,GAGIC;IACN;EACDN,EAAUQ;EACVR,EAAUO;EACVJ;EACAF;EACAI;EACD,CAEMC"}