@velora-dex/widget 0.4.14 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/dist/components/web3/ConnectWallets/walletFlags.d.ts +90 -0
  2. package/dist/components/web3/ConnectWallets/walletFlags.d.ts.map +1 -0
  3. package/dist/components/web3/ConnectWallets/walletFlags.js +104 -0
  4. package/dist/components/web3/ConnectWallets/walletFlags.js.map +1 -0
  5. package/dist/components/web3/ConnectWallets/walletIcons.d.ts +4 -1
  6. package/dist/components/web3/ConnectWallets/walletIcons.d.ts.map +1 -1
  7. package/dist/components/web3/ConnectWallets/walletIcons.js +23 -3
  8. package/dist/components/web3/ConnectWallets/walletIcons.js.map +1 -1
  9. package/dist/components/widget/AppHeader/Activities/Drawers.d.ts.map +1 -1
  10. package/dist/components/widget/AppHeader/Activities/Drawers.js +24 -14
  11. package/dist/components/widget/AppHeader/Activities/Drawers.js.map +1 -1
  12. package/dist/components/widget/Button/CancelButton/CancelButton.js +44 -40
  13. package/dist/components/widget/Button/CancelButton/CancelButton.js.map +1 -1
  14. package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.d.ts +15 -0
  15. package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.d.ts.map +1 -0
  16. package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.js +66 -0
  17. package/dist/components/widget/Button/CancelButton/CancelButtonWithDrawer.js.map +1 -0
  18. package/dist/components/widget/Drawer/state/useDrawerControls.d.ts +5 -2
  19. package/dist/components/widget/Drawer/state/useDrawerControls.d.ts.map +1 -1
  20. package/dist/components/widget/Drawer/state/useDrawerControls.js +75 -2
  21. package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
  22. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.d.ts.map +1 -1
  23. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js +85 -49
  24. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js.map +1 -1
  25. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/Controls.d.ts.map +1 -1
  26. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/Controls.js +33 -22
  27. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/Controls.js.map +1 -1
  28. package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.d.ts +7 -0
  29. package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.d.ts.map +1 -0
  30. package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.js +84 -0
  31. package/dist/components/widget/TradeOverview/CancelButtonWithDrawer.js.map +1 -0
  32. package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.d.ts +12 -0
  33. package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.d.ts.map +1 -0
  34. package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.js +227 -0
  35. package/dist/components/widget/TradeOverview/CancelOrder/ConfirmCancel.js.map +1 -0
  36. package/dist/components/widget/TradeOverview/CancelOrder/constants.d.ts +8 -0
  37. package/dist/components/widget/TradeOverview/CancelOrder/constants.d.ts.map +1 -0
  38. package/dist/components/widget/TradeOverview/CancelOrder/constants.js +20 -0
  39. package/dist/components/widget/TradeOverview/CancelOrder/constants.js.map +1 -0
  40. package/dist/components/widget/TradeOverview/CancelOrder/utils.d.ts +12 -0
  41. package/dist/components/widget/TradeOverview/CancelOrder/utils.d.ts.map +1 -0
  42. package/dist/components/widget/TradeOverview/CancelOrder/utils.js +49 -0
  43. package/dist/components/widget/TradeOverview/CancelOrder/utils.js.map +1 -0
  44. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.d.ts +2 -2
  45. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.d.ts.map +1 -1
  46. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js +38 -28
  47. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js.map +1 -1
  48. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.d.ts.map +1 -1
  49. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js +16 -18
  50. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js.map +1 -1
  51. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.d.ts +2 -1
  52. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.d.ts.map +1 -1
  53. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js +78 -64
  54. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteHeader.js.map +1 -1
  55. package/dist/components/widget/TradeOverview/TradeComplete/index.d.ts.map +1 -1
  56. package/dist/components/widget/TradeOverview/TradeComplete/index.js +21 -14
  57. package/dist/components/widget/TradeOverview/TradeComplete/index.js.map +1 -1
  58. package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.d.ts +2 -1
  59. package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.d.ts.map +1 -1
  60. package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.js +66 -24
  61. package/dist/components/widget/TradeOverview/TradeError/TradeErrorDetails.js.map +1 -1
  62. package/dist/components/widget/TradeOverview/TradeError/index.d.ts.map +1 -1
  63. package/dist/components/widget/TradeOverview/TradeError/index.js +11 -7
  64. package/dist/components/widget/TradeOverview/TradeError/index.js.map +1 -1
  65. package/dist/components/widget/TradeOverview/TradeError/utils.d.ts +4 -1
  66. package/dist/components/widget/TradeOverview/TradeError/utils.d.ts.map +1 -1
  67. package/dist/components/widget/TradeOverview/TradeError/utils.js +20 -2
  68. package/dist/components/widget/TradeOverview/TradeError/utils.js.map +1 -1
  69. package/dist/components/widget/TradeOverview/TradeOverview.d.ts +5 -4
  70. package/dist/components/widget/TradeOverview/TradeOverview.d.ts.map +1 -1
  71. package/dist/components/widget/TradeOverview/TradeOverview.js.map +1 -1
  72. package/dist/components/widget/TradeOverview/TradeOverviewFooter.d.ts.map +1 -1
  73. package/dist/components/widget/TradeOverview/TradeOverviewFooter.js +15 -21
  74. package/dist/components/widget/TradeOverview/TradeOverviewFooter.js.map +1 -1
  75. package/dist/components/widget/TradeOverview/steps.d.ts +4 -0
  76. package/dist/components/widget/TradeOverview/steps.d.ts.map +1 -1
  77. package/dist/components/widget/TradeOverview/steps.js.map +1 -1
  78. package/dist/components/widget/TradeOverview/tradeFlowContext.d.ts +22 -5
  79. package/dist/components/widget/TradeOverview/tradeFlowContext.d.ts.map +1 -1
  80. package/dist/components/widget/TradeOverview/tradeFlowContext.js +37 -11
  81. package/dist/components/widget/TradeOverview/tradeFlowContext.js.map +1 -1
  82. package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.d.ts +4 -1
  83. package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.d.ts.map +1 -1
  84. package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.js +133 -31
  85. package/dist/components/widget/TransactionDetails/LimitOrderDetails/Controls.js.map +1 -1
  86. package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.d.ts +7 -2
  87. package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.d.ts.map +1 -1
  88. package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.js +18 -14
  89. package/dist/components/widget/TransactionDetails/LimitOrderDetails/TransactionDetails.js.map +1 -1
  90. package/dist/components/widget/TransactionDetails/TransactionListItem.d.ts.map +1 -1
  91. package/dist/components/widget/TransactionDetails/TransactionListItem.js +1 -1
  92. package/dist/components/widget/TransactionDetails/TransactionListItem.js.map +1 -1
  93. package/dist/configurator/Configurator.d.ts.map +1 -1
  94. package/dist/core/Updaters.d.ts.map +1 -1
  95. package/dist/core/Updaters.js +2 -0
  96. package/dist/core/Updaters.js.map +1 -1
  97. package/dist/core/state/widgetEventsAtom.d.ts.map +1 -1
  98. package/dist/core/state/widgetEventsAtom.js +51 -37
  99. package/dist/core/state/widgetEventsAtom.js.map +1 -1
  100. package/dist/events/types/{cancel.d.ts → cancelOrder.d.ts} +5 -2
  101. package/dist/events/types/cancelOrder.d.ts.map +1 -0
  102. package/dist/events/types/cancelTx.d.ts +35 -0
  103. package/dist/events/types/cancelTx.d.ts.map +1 -0
  104. package/dist/events/types/index.d.ts +5 -2
  105. package/dist/events/types/index.d.ts.map +1 -1
  106. package/dist/events/types/swap.d.ts +11 -1
  107. package/dist/events/types/swap.d.ts.map +1 -1
  108. package/dist/hooks/connectors/useIsConnectedSafe.js +1 -0
  109. package/dist/hooks/connectors/useIsConnectedSafe.js.map +1 -1
  110. package/dist/hooks/getCode/useIsAccountContract.js.map +1 -1
  111. package/dist/hooks/otc/mutations/useCancelLimitOrder.d.ts +20 -2
  112. package/dist/hooks/otc/mutations/useCancelLimitOrder.d.ts.map +1 -1
  113. package/dist/hooks/otc/mutations/useCancelLimitOrder.js +197 -74
  114. package/dist/hooks/otc/mutations/useCancelLimitOrder.js.map +1 -1
  115. package/dist/hooks/otc/tradeFlow/useFillOtcOrderFlow.d.ts.map +1 -1
  116. package/dist/hooks/otc/tradeFlow/useFillOtcOrderFlow.js +0 -1
  117. package/dist/hooks/otc/tradeFlow/useFillOtcOrderFlow.js.map +1 -1
  118. package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.d.ts +6 -1
  119. package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.d.ts.map +1 -1
  120. package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.js +37 -24
  121. package/dist/hooks/otc/tradeFlow/useOtcOrderFlow.js.map +1 -1
  122. package/dist/hooks/otc/tradeFlow/useOtcOrderStep.d.ts +2 -2
  123. package/dist/hooks/otc/tradeFlow/useOtcOrderStep.d.ts.map +1 -1
  124. package/dist/hooks/otc/tradeFlow/useOtcOrderStep.js +28 -42
  125. package/dist/hooks/otc/tradeFlow/useOtcOrderStep.js.map +1 -1
  126. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.d.ts +6 -1
  127. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.d.ts.map +1 -1
  128. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js +16 -0
  129. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js.map +1 -1
  130. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.d.ts +10 -4
  131. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.d.ts.map +1 -1
  132. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js +176 -145
  133. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js.map +1 -1
  134. package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.d.ts +11 -0
  135. package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.d.ts.map +1 -0
  136. package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.js +69 -0
  137. package/dist/hooks/swap/prices/delta/mutations/useIsDeltaOrderCancellable.js.map +1 -0
  138. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.d.ts +2 -2
  139. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.d.ts.map +1 -1
  140. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js +24 -28
  141. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js.map +1 -1
  142. package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.d.ts +6 -2
  143. package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.d.ts.map +1 -1
  144. package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js +8 -2
  145. package/dist/hooks/swap/prices/market/mutations/useSendMarketSwapTx.js.map +1 -1
  146. package/dist/hooks/swap/tradeFlow/common/errors.d.ts +6 -0
  147. package/dist/hooks/swap/tradeFlow/common/errors.d.ts.map +1 -1
  148. package/dist/hooks/swap/tradeFlow/common/errors.js +15 -1
  149. package/dist/hooks/swap/tradeFlow/common/errors.js.map +1 -1
  150. package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts +6 -1
  151. package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts.map +1 -1
  152. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js +55 -19
  153. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
  154. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.d.ts +2 -2
  155. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.d.ts.map +1 -1
  156. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js +45 -57
  157. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
  158. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.d.ts +6 -1
  159. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.d.ts.map +1 -1
  160. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js +26 -5
  161. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
  162. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.d.ts +4 -4
  163. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.d.ts.map +1 -1
  164. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js +23 -37
  165. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js.map +1 -1
  166. package/dist/hooks/swap/tradeFlow/useMarketFlow.d.ts +13 -1
  167. package/dist/hooks/swap/tradeFlow/useMarketFlow.d.ts.map +1 -1
  168. package/dist/hooks/swap/tradeFlow/useMarketFlow.js +93 -26
  169. package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
  170. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.d.ts +7 -1
  171. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.d.ts.map +1 -1
  172. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js +59 -42
  173. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
  174. package/dist/hooks/txs/mutations/useReplaceTx.d.ts +86 -0
  175. package/dist/hooks/txs/mutations/useReplaceTx.d.ts.map +1 -0
  176. package/dist/hooks/txs/mutations/useReplaceTx.js +514 -0
  177. package/dist/hooks/txs/mutations/useReplaceTx.js.map +1 -0
  178. package/dist/hooks/txs/mutations/useSendTx.d.ts +7 -2
  179. package/dist/hooks/txs/mutations/useSendTx.d.ts.map +1 -1
  180. package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
  181. package/dist/hooks/txs/queries/useAccountNonce.d.ts +9 -0
  182. package/dist/hooks/txs/queries/useAccountNonce.d.ts.map +1 -0
  183. package/dist/hooks/txs/queries/useAccountNonce.js +31 -0
  184. package/dist/hooks/txs/queries/useAccountNonce.js.map +1 -0
  185. package/dist/hooks/txs/queries/useTxFees.d.ts +16 -0
  186. package/dist/hooks/txs/queries/useTxFees.d.ts.map +1 -0
  187. package/dist/hooks/txs/queries/useTxFees.js +103 -0
  188. package/dist/hooks/txs/queries/useTxFees.js.map +1 -0
  189. package/dist/hooks/txs/queries/useTxHistory.d.ts.map +1 -1
  190. package/dist/hooks/txs/queries/useTxHistory.js +3 -2
  191. package/dist/hooks/txs/queries/useTxHistory.js.map +1 -1
  192. package/dist/hooks/txs/queries/useTxResponse.d.ts +2390 -0
  193. package/dist/hooks/txs/queries/useTxResponse.d.ts.map +1 -0
  194. package/dist/hooks/txs/queries/useTxResponse.js +75 -0
  195. package/dist/hooks/txs/queries/useTxResponse.js.map +1 -0
  196. package/dist/hooks/txs/queries/useWalletCanReplaceTx.d.ts +2 -0
  197. package/dist/hooks/txs/queries/useWalletCanReplaceTx.d.ts.map +1 -0
  198. package/dist/hooks/txs/queries/useWalletCanReplaceTx.js +30 -0
  199. package/dist/hooks/txs/queries/useWalletCanReplaceTx.js.map +1 -0
  200. package/dist/index.d.ts +1 -1
  201. package/dist/index.d.ts.map +1 -1
  202. package/dist/styles.css +3 -0
  203. package/dist/transactions/queries/ensureEstimateFeesPerGas.d.ts +16 -0
  204. package/dist/transactions/queries/ensureEstimateFeesPerGas.d.ts.map +1 -0
  205. package/dist/transactions/queries/ensureEstimateFeesPerGas.js +23 -0
  206. package/dist/transactions/queries/ensureEstimateFeesPerGas.js.map +1 -0
  207. package/dist/transactions/queries/ensureTxReceipt.d.ts.map +1 -1
  208. package/dist/transactions/queries/ensureTxReceipt.js +1 -1
  209. package/dist/transactions/queries/ensureTxReceipt.js.map +1 -1
  210. package/dist/transactions/queries/ensureTxResponse.d.ts +17 -0
  211. package/dist/transactions/queries/ensureTxResponse.d.ts.map +1 -0
  212. package/dist/transactions/queries/ensureTxResponse.js +23 -0
  213. package/dist/transactions/queries/ensureTxResponse.js.map +1 -0
  214. package/dist/transactions/state/hooks/useMarkTxAsDropped.d.ts +7 -0
  215. package/dist/transactions/state/hooks/useMarkTxAsDropped.d.ts.map +1 -0
  216. package/dist/transactions/state/hooks/useMarkTxAsDropped.js +10 -0
  217. package/dist/transactions/state/hooks/useMarkTxAsDropped.js.map +1 -0
  218. package/dist/transactions/state/transactionsActionAtom.d.ts +12 -0
  219. package/dist/transactions/state/transactionsActionAtom.d.ts.map +1 -1
  220. package/dist/transactions/state/transactionsActionAtom.js +40 -1
  221. package/dist/transactions/state/transactionsActionAtom.js.map +1 -1
  222. package/dist/transactions/status.d.ts +1 -1
  223. package/dist/transactions/status.d.ts.map +1 -1
  224. package/dist/transactions/status.js +6 -0
  225. package/dist/transactions/status.js.map +1 -1
  226. package/dist/transactions/types.d.ts +15 -2
  227. package/dist/transactions/types.d.ts.map +1 -1
  228. package/package.json +2 -2
  229. package/dist/events/types/cancel.d.ts.map +0 -1
@@ -3,11 +3,12 @@ import { useAccount } from 'wagmi';
3
3
  import { useSendMarketSwapTx } from '../prices/market/mutations/useSendMarketSwapTx.js';
4
4
  import { useBuildTx } from '../prices/market/mutations/useBuildTx.js';
5
5
  import { assert } from 'ts-essentials';
6
+ import 'viem';
6
7
  import { applySlippage } from '../../../lib/utils/price.js';
7
8
  import { useSlippage } from '../../useSlippage.js';
8
9
  import { useMutation } from '@tanstack/react-query';
9
10
  import { useRef } from 'react';
10
- import { UserCancelledError } from './common/errors.js';
11
+ import { isTransactionCancelledError, TransactionCancelledError, UserCancelledError } from './common/errors.js';
11
12
  import { useSwapReceiverAddressValue } from '../../../components/widget/ReceiverAddress/state/receiverAddressAtom.js';
12
13
  import { useSwapSide } from '../../../components/widget/SwapModeSwitcher/state/swapSideAtom.js';
13
14
  import { useApproveOrPermit } from './common/useApproveOrPermit.js';
@@ -22,6 +23,7 @@ import { useAwaitCalls, useEnsureCallsStatus } from '../../batch/useAwaitCalls.j
22
23
  import { useBatchWithApproveTxs } from '../../batch/useBatchWithApproveTxs.js';
23
24
  import { useWidgetEvents } from '../../../core/state/widgetEventsAtom.js';
24
25
  import { usePricesParams } from '../prices/usePricesParams.js';
26
+ import { useReplaceTx } from '../../txs/mutations/useReplaceTx.js';
25
27
 
26
28
  const marketSwapFlowType = "marketSwap";
27
29
  const MARKET_SWAP_MUTATION_KEY = "runMarketSwapFlow";
@@ -110,6 +112,39 @@ function useMarketFlow({
110
112
  const batchTxMined = useAwaitCalls({
111
113
  id: batchTxMut.data?.id
112
114
  });
115
+ const cancelSwapTxMut = useReplaceTx({
116
+ chainId,
117
+ txHash: sendSwapTxMut.txHash,
118
+ cancelTxType: "SWAP",
119
+ onSuccess: (details) => {
120
+ onSwap?.({
121
+ event: {
122
+ name: "Swap:cancelled",
123
+ params: {
124
+ swapMode: "market",
125
+ cancelTxDetails: details
126
+ }
127
+ }
128
+ });
129
+ }
130
+ });
131
+ const currentAbortControllerRef = useRef(null);
132
+ const cancelSwapTx = async () => {
133
+ try {
134
+ assert(sendSwapTxMut.txHash, "Swap tx hash is not available");
135
+ const result = await cancelSwapTxMut.replaceTx({
136
+ action: "cancel",
137
+ hash: sendSwapTxMut.txHash
138
+ });
139
+ if (result.replacementTxReceipt.status === "success") {
140
+ currentAbortControllerRef.current?.abort(new TransactionCancelledError("Swap tx cancelled", result));
141
+ }
142
+ return result;
143
+ } catch (error_2) {
144
+ logger.error("Cancel swap tx error", error_2);
145
+ cancelSwapTxMut.reset();
146
+ }
147
+ };
113
148
  const swap = {
114
149
  txHash: sendSwapTxMut.txHash,
115
150
  receipt: swapTxMined.data,
@@ -126,7 +161,18 @@ function useMarketFlow({
126
161
  isSuccess: swapTxMined.isSuccess,
127
162
  // final success
128
163
  isError: sendSwapTxMut.isError || swapTxMined.isError,
129
- error: sendSwapTxMut.error || swapTxMined.error
164
+ error: sendSwapTxMut.error || swapTxMined.error,
165
+ isTxCancellable: cancelSwapTxMut.isWalletSupported && // allow to retry cancel (no !cancelSwapTxMut.isPending check) if the Cancel tx is slow
166
+ !!sendSwapTxMut.txHash && !swapTxMined.data && !cancelSwapTxMut.isSuccess,
167
+ cancelSwapTx,
168
+ cancellingState: {
169
+ isPending: cancelSwapTxMut.isPending,
170
+ isError: cancelSwapTxMut.isError,
171
+ isSuccess: cancelSwapTxMut.isSuccess,
172
+ error: cancelSwapTxMut.error,
173
+ result: cancelSwapTxMut.result,
174
+ step: cancelSwapTxMut.step
175
+ }
130
176
  };
131
177
  const lastCallsReceipt = batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];
132
178
  const swapBatch = {
@@ -153,7 +199,6 @@ function useMarketFlow({
153
199
  } = useAccount();
154
200
  const ensureTxReceipt = useEnsureTxReceipt();
155
201
  const ensureCallsStatus = useEnsureCallsStatus();
156
- const currentAbortControllerRef = useRef(null);
157
202
  const usingPriceRef = useRef(null);
158
203
  const cancelFlow = () => {
159
204
  currentAbortControllerRef.current?.abort(new UserCancelledError());
@@ -189,6 +234,7 @@ function useMarketFlow({
189
234
  buildTxMut.reset();
190
235
  sendSwapTxMut.reset();
191
236
  batchTxMut.reset();
237
+ cancelSwapTxMut.reset();
192
238
  assert(marketPrice, "Market price is not available");
193
239
  const abortController = new AbortController();
194
240
  currentAbortControllerRef.current = abortController;
@@ -292,21 +338,21 @@ function useMarketFlow({
292
338
  permit: signedPermitResult?.permitEncodedArgs
293
339
  });
294
340
  }
295
- } catch (error_3) {
341
+ } catch (error_4) {
296
342
  if (!tryPermit) {
297
343
  approveOrPermitEvents.onApproveTx.failed({
298
344
  allowanceToSet,
299
- error: error_3,
345
+ error: error_4,
300
346
  txHash: approveTxHash
301
347
  // won't necessarily be available
302
348
  });
303
349
  } else {
304
350
  approveOrPermitEvents.onSignPermit.failed({
305
351
  allowanceToSet: allowanceToPermit,
306
- error: error_3
352
+ error: error_4
307
353
  });
308
354
  }
309
- throw error_3;
355
+ throw error_4;
310
356
  }
311
357
  }
312
358
  signal.throwIfAborted();
@@ -395,7 +441,10 @@ function useMarketFlow({
395
441
  }
396
442
  });
397
443
  } else {
398
- swapTxHash = await sendSwapTxMut.sendTransactionAsync(txParams);
444
+ swapTxHash = await sendSwapTxMut.sendTransactionAsync({
445
+ ...txParams,
446
+ chainId
447
+ });
399
448
  onSwap?.({
400
449
  event: {
401
450
  name: "Swap:sent",
@@ -432,7 +481,8 @@ function useMarketFlow({
432
481
  destAmount: amountsAfterSlippage_0.destAmount,
433
482
  srcAmountUSD: marketPriceToUse.srcUSD,
434
483
  destAmountUSD: marketPriceToUse.destUSD,
435
- gasCost: marketPriceToUse.gasCost
484
+ gasCost: marketPriceToUse.gasCost,
485
+ swapSide: marketPriceToUse.side
436
486
  }
437
487
  });
438
488
  }
@@ -459,12 +509,25 @@ function useMarketFlow({
459
509
  }
460
510
  });
461
511
  logger.log("~ swapTx ~ awaiting tx hash :", swapTxHash);
512
+ signal.throwIfAborted();
513
+ const txCancelledPromise = new Promise((_, reject) => {
514
+ signal.onabort = () => {
515
+ try {
516
+ signal.throwIfAborted();
517
+ } catch (error_5) {
518
+ if (isTransactionCancelledError(error_5)) {
519
+ reject(error_5);
520
+ }
521
+ }
522
+ };
523
+ });
524
+ const txReceiptOrCancelledPromise = Promise.race([swapTxReceiptPromise, txCancelledPromise]);
462
525
  if (onTxSent) {
463
526
  onTxSent({
464
527
  chainId,
465
528
  action: "swap",
466
529
  transactionHash: swapTxHash,
467
- receiptPromise: swapTxReceiptPromise,
530
+ receiptPromise: txReceiptOrCancelledPromise,
468
531
  transactionSpecificData: {
469
532
  action: "swap",
470
533
  source: "local",
@@ -475,11 +538,12 @@ function useMarketFlow({
475
538
  srcAmountUSD: marketPriceToUse.srcUSD,
476
539
  destAmountUSD: marketPriceToUse.destUSD,
477
540
  gasCost: marketPriceToUse.gasCost,
478
- gasCostUSD: marketPriceToUse.gasCostUSD
541
+ gasCostUSD: marketPriceToUse.gasCostUSD,
542
+ swapSide: marketPriceToUse.side
479
543
  }
480
544
  });
481
545
  }
482
- swapTxReceipt = await swapTxReceiptPromise;
546
+ swapTxReceipt = await txReceiptOrCancelledPromise;
483
547
  if (swapTxReceipt) {
484
548
  onSwap?.({
485
549
  event: {
@@ -513,20 +577,22 @@ function useMarketFlow({
513
577
  account,
514
578
  receiverAddress
515
579
  };
516
- } catch (error_2) {
580
+ } catch (error_3) {
517
581
  if (signedPermitResult) {
518
582
  clearNonce(signedPermitResult.signedPermitData);
519
583
  }
520
- onSwap?.({
521
- event: {
522
- name: "Swap:failed",
523
- params: {
524
- swapMode: "market",
525
- error: error_2
584
+ if (!isTransactionCancelledError(error_3)) {
585
+ onSwap?.({
586
+ event: {
587
+ name: "Swap:failed",
588
+ params: {
589
+ swapMode: "market",
590
+ error: error_3
591
+ }
526
592
  }
527
- }
528
- });
529
- throw error_2;
593
+ });
594
+ }
595
+ throw error_3;
530
596
  } finally {
531
597
  unsubscribeFromPrice?.();
532
598
  }
@@ -537,8 +603,8 @@ function useMarketFlow({
537
603
  onSuccess: (data_1) => {
538
604
  logger.log("Swap tx success", data_1);
539
605
  },
540
- onError: (error_4) => {
541
- logger.error("Swap tx error", error_4);
606
+ onError: (error_6) => {
607
+ logger.error("Swap tx error", error_6);
542
608
  },
543
609
  onSettled: () => {
544
610
  logger.log("Swap tx settled");
@@ -553,6 +619,7 @@ function useMarketFlow({
553
619
  sendSwapTxMut.reset();
554
620
  batchTxMut.reset();
555
621
  marketSwapMut.reset();
622
+ cancelSwapTxMut.reset();
556
623
  };
557
624
  const retryFlow = (options) => {
558
625
  const lastPrice_0 = usingPriceRef.current;
@@ -563,8 +630,8 @@ function useMarketFlow({
563
630
  });
564
631
  };
565
632
  const usedPrice = usingPriceRef.current || marketPrice;
566
- const result = marketSwapMut.data;
567
- const submittedSwapRequest = result?.swap.swapRequest;
633
+ const result_0 = marketSwapMut.data;
634
+ const submittedSwapRequest = result_0?.swap.swapRequest;
568
635
  return {
569
636
  tradeFlowType: marketSwapFlowType,
570
637
  chainId,
@@ -1 +1 @@
1
- {"version":3,"file":"useMarketFlow.js","sources":["../../../../src/hooks/swap/tradeFlow/useMarketFlow.ts"],"sourcesContent":["import { useAwaitTx } from \"@/hooks/txs\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { useSendMarketSwapTx } from \"../prices/market/mutations/useSendMarketSwapTx\";\nimport {\n useBuildTx,\n type BuildMarketSwapTxInput,\n} from \"../prices/market/mutations/useBuildTx\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport type { Address, Hash, Hex, TransactionReceipt } from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { UserCancelledError } from \"./common/errors\";\nimport { useSwapReceiverAddressValue } from \"@/components/widget/ReceiverAddress/state/receiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport { useConstructGasParams } from \"./common/useConstructGasParams\";\nimport {\n useMarketPriceQuery,\n useSubscribeToMarketPrice,\n} from \"../prices/market/queries/useMarketPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\n\nconst marketSwapFlowType = \"marketSwap\";\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { type CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport type { BatchTxStepResult } from \"./common/types\";\nimport { usePricesParams } from \"../prices/usePricesParams\";\n\nexport type UseMarketFlowInput = {\n marketPrice?: OptimalRate;\n};\n\nexport type MarketSwapRequest = BuildMarketSwapTxInput & {\n // narrow down BuildMarketSwapTxInput from \"any two present\" {srcAmount?, destAmount?, slippage?}\n // to \"amounts always present\" variant\n swapTxInput: { srcAmount: string; destAmount: string };\n};\n\nexport type SubmitSwapResult = {\n tradeFlowType: typeof marketSwapFlowType;\n approve: SubmitTxResult;\n swap: SubmitTxResult & { swapRequest?: MarketSwapRequest };\n marketPrice: OptimalRate;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt}) when mined,\n// maybe??\ntype RunMarketOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseMarketFlowResult = {\n tradeFlowType: typeof marketSwapFlowType;\n chainId: SupportedChainId;\n runMarketSwapFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n buildTxParams: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swap: {\n txHash?: Hash;\n receipt?: TransactionReceipt;\n isConfirmingTX: boolean;\n isConfirmingTxError: boolean;\n isTxSent: boolean;\n isTxPending: boolean;\n isTxMined: boolean;\n isTxAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swapBatch: BatchTxStepResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitSwapResult;\n usedPrice?: OptimalRate;\n freshPrice?: OptimalRate;\n submittedSwapRequest?: MarketSwapRequest;\n};\n\nconst MARKET_SWAP_MUTATION_KEY = \"runMarketSwapFlow\";\n\nexport function useMarketFlow({\n marketPrice: _marketPrice,\n}: UseMarketFlowInput): UseMarketFlowResult {\n const logger = useLogger(\"MarketFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n const swapSideFromInput = useSwapSide();\n\n const { priceParams, chainId } = usePricesParams(\"swap\");\n\n const { result: marketPriceQuery, queryKey: marketPriceQueryKey } =\n useMarketPriceQuery({\n priceParams,\n chainId,\n query: {\n enabled: false,\n },\n });\n\n const marketPrice = marketPriceQuery.data || _marketPrice;\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 2.2. sign Permit1 \n\n 3. await Approve tx (if not using Permit) \n */\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: marketPrice?.srcToken,\n // if we already approved some amount, save it in approval and signPermit objects\n srcAmount: marketPrice?.srcAmount,\n spenderContractType: \"AugustusSwapper\",\n // marketPrice is the preferred source of truth\n swapSide: marketPrice?.side ?? swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4. Build Swap tx */\n const buildTxMut = useBuildTx({\n chainId,\n mutationOptions: {\n onSuccess: () => {\n logger.log(\"Build tx success\");\n },\n onError: (error) => {\n logger.error(\"Build tx error\", error);\n },\n },\n });\n\n const buildTxParams: UseMarketFlowResult[\"buildTxParams\"] = {\n isPending: buildTxMut.isPending,\n isError: buildTxMut.isError,\n isSuccess: buildTxMut.isSuccess,\n error: buildTxMut.error,\n };\n\n /* 5. submit Swap tx */\n\n /* 5.1. submit standalone Swap tx */\n\n const sendSwapTxMut = useSendMarketSwapTx({\n onSuccess: () => {\n logger.log(\"Swap tx success\");\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n });\n\n /* 5.2. submit Batch tx */\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 6. await Swap tx */\n\n /* 6.1. await standalone Swap tx */\n const swapTxMined = useAwaitTx({\n hash: sendSwapTxMut.txHash,\n chainId,\n });\n\n /* 6.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const swap: UseMarketFlowResult[\"swap\"] = {\n txHash: sendSwapTxMut.txHash,\n receipt: swapTxMined.data,\n /* tx sending */\n isConfirmingTX: sendSwapTxMut.isPending,\n isConfirmingTxError: sendSwapTxMut.isError,\n isTxSent: sendSwapTxMut.isSuccess,\n /* tx awaiting */\n isTxPending: swapTxMined.isLoading,\n isTxMined: swapTxMined.isSuccess,\n isTxAwaitingError: swapTxMined.isError,\n /* combined */\n isPending: sendSwapTxMut.isPending || swapTxMined.isLoading,\n isSuccess: swapTxMined.isSuccess, // final success\n isError: sendSwapTxMut.isError || swapTxMined.isError,\n error: sendSwapTxMut.error || swapTxMined.error,\n };\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const swapBatch: UseMarketFlowResult[\"swapBatch\"] = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n const { address: account } = useAccount();\n\n const ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\n\n // allows to abort (cancel) currently running flow,\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n const usingPriceRef = useRef<OptimalRate | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { constructGasParams } = useConstructGasParams();\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n\n const subscribeToPrice = useSubscribeToMarketPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitSwapTx: (\n options?: RunMarketOptions & { lastPrice?: OptimalRate | null }\n ) => Promise<SubmitSwapResult> = async ({ onTxSent, lastPrice } = {}) => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and deltaPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(marketPrice, \"Market price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the syncronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // marketPrice here is the starting price, available before async code and waiting\n let freshPrice = marketPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Swap tx, because it failed the last time,\n // but the price hasn't updated yet, so force refetch\n const newPriceResult = await marketPriceQuery.refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const queryKey = marketPriceQueryKey;\n\n // should always be available\n if (queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey,\n onData: (newPrice) => {\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n // slightly higher amount if BUY with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n newPrice.side\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n // Token doesn't support Permit\n // make an Approval tx\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n // @TODO check if we need to see if receipt.status === \"reverted\" and throw,\n // or if waitForTransactionReceipt already throws on such receipts\n } else {\n approveOrPermitEvents.onSignPermit.request({\n allowanceToSet: allowanceToPermit,\n });\n\n // sign Permit\n signedPermitResult = await signPermitMut.signPermitAsync({\n value: allowanceToPermit,\n });\n\n approveOrPermitEvents.onSignPermit.confirmed({\n allowanceToSet: allowanceToPermit,\n permit: signedPermitResult?.permitEncodedArgs,\n });\n }\n } catch (error) {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n } else {\n approveOrPermitEvents.onSignPermit.failed({\n allowanceToSet: allowanceToPermit,\n error: error as Error,\n });\n }\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const marketPriceToUse = freshPrice;\n usingPriceRef.current = marketPriceToUse;\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(marketPriceToUse, \"Market price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: marketPriceToUse.srcAmount,\n destAmount: marketPriceToUse.destAmount,\n },\n resolvedSlippage,\n marketPriceToUse.side\n );\n\n // fresh gas params\n const gasParams = constructGasParams();\n\n const swapRequest: MarketSwapRequest = {\n swapTxInput: {\n userAddress: account,\n receiver: receiverAddress,\n srcToken: marketPriceToUse.srcToken,\n destToken: marketPriceToUse.destToken,\n srcDecimals: marketPriceToUse.srcDecimals,\n destDecimals: marketPriceToUse.destDecimals,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n takeSurplus: partnerTakesSurplus,\n\n permit: signedPermitResult?.permitEncodedArgs, // just signed Permit signature\n\n priceRoute: marketPriceToUse,\n ...amountsAfterSlippage,\n },\n\n swapTxOptions: {\n // ignoreChecks: true,\n // gas estimate will break if only swap tx is estimated, but approve tx is not considered in a batch\n ignoreGasEstimate: shouldBatchTxs,\n // for Batch-capable wallets batch Approve+Swap tx have to ignore all checks\n ignoreAllowance: shouldBatchTxs,\n // onlyParams: true,\n degenMode: priceParams.degenMode,\n ...gasParams,\n },\n };\n\n const txParams = await buildTxMut.mutateAsync(swapRequest);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n let swapTxHash: Hash | undefined;\n let swapCallsId: string | undefined;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n },\n },\n });\n\n if (shouldBatchTxs) {\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: txParams.to as Address,\n account: txParams.from as Address,\n data: txParams.data as Hex,\n value: BigInt(txParams.value),\n chainId: txParams.chainId,\n },\n ],\n approveProps: [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ],\n });\n\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n swapCallsId = sendCallsResult.id;\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsId: swapCallsId,\n },\n },\n });\n } else {\n swapTxHash = await sendSwapTxMut.sendTransactionAsync(txParams);\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txHash: swapTxHash,\n },\n },\n });\n }\n\n // no use aborting past this point, tx is already sent,\n // but we may want to connect this late abortion to tx cancellation, in the future\n\n // tx is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n let swapCallsReceipt: CallsReceipt | undefined;\n let swapTxReceipt: TransactionReceipt | undefined;\n\n if (swapCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: swapCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ swapTx ~ awaiting calls id :\", swapCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n callsId: swapCallsId,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n },\n });\n }\n\n swapCallsReceipt = await sendCallsReceiptPromise;\n\n if (swapCallsReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsReceipt: swapCallsReceipt,\n callsId: swapCallsId,\n },\n },\n });\n }\n } else if (swapTxHash) {\n const swapTxReceiptPromise = ensureTxReceipt({\n hash: swapTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:swapTx\", swapTxHash, data);\n },\n });\n\n logger.log(\"~ swapTx ~ awaiting tx hash :\", swapTxHash);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n transactionHash: swapTxHash,\n receiptPromise: swapTxReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n gasCostUSD: marketPriceToUse.gasCostUSD,\n },\n });\n }\n\n swapTxReceipt = await swapTxReceiptPromise;\n\n if (swapTxReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txReceipt: swapTxReceipt,\n txHash: swapTxHash,\n },\n },\n });\n }\n }\n\n logger.log(\"~ swapTx ~ receipt:\", swapCallsReceipt || swapTxReceipt);\n // @TODO check if we need to see if receipt.status === \"reverted\" and trhow,\n // or if waitForTransactionReceipt already throws on such receipts\n\n return {\n tradeFlowType: marketSwapFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n swap: {\n swapRequest,\n callsId: swapCallsId,\n txHash: swapTxHash,\n receipt: swapTxReceipt,\n callsReceipt: swapCallsReceipt,\n },\n marketPrice: marketPriceToUse,\n // @TODO add whatever else may be relevant\n account,\n receiverAddress,\n };\n } catch (error) {\n // Market swap failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n // or even Order in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"market\",\n error: error as Error,\n },\n },\n });\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const marketSwapMut = useMutation({\n mutationFn: submitSwapTx,\n mutationKey: [MARKET_SWAP_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Swap tx success\", data);\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n onSettled: () => {\n logger.log(\"Swap tx settled\");\n },\n });\n\n const runMarketSwapFlow = marketSwapMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n marketSwapMut.reset();\n };\n\n const retryFlow = (options?: RunMarketOptions): Promise<SubmitSwapResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runMarketSwapFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice = usingPriceRef.current || marketPrice;\n\n const result = marketSwapMut.data;\n const submittedSwapRequest = result?.swap.swapRequest;\n\n /* 7. return result */\n return {\n tradeFlowType: marketSwapFlowType,\n chainId,\n runMarketSwapFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n buildTxParams,\n swap,\n swapBatch,\n // marketSwapMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: marketSwapMut.isPending,\n isSuccess: marketSwapMut.isSuccess,\n isError: marketSwapMut.isError,\n error: marketSwapMut.error,\n result: marketSwapMut.data,\n usedPrice,\n freshPrice: marketPrice,\n submittedSwapRequest,\n };\n}\n"],"names":["marketSwapFlowType","MARKET_SWAP_MUTATION_KEY","useMarketFlow","marketPrice","_marketPrice","logger","useLogger","resolvedSlippage","useSlippage","swapSideFromInput","useSwapSide","priceParams","chainId","usePricesParams","result","marketPriceQuery","queryKey","marketPriceQueryKey","useMarketPriceQuery","query","enabled","data","approval","signPermit","approveTxMut","signPermitMut","events","approveOrPermitEvents","useApproveOrPermit","srcToken","srcAmount","spenderContractType","swapSide","side","tradeMode","buildTxMut","useBuildTx","mutationOptions","onSuccess","log","onError","error","buildTxParams","isPending","isError","isSuccess","sendSwapTxMut","useSendMarketSwapTx","forCurrentChain","canBatchTxs","useCanBatchTxs","addTxWithApprovals","useBatchWithApproveTxs","batchTxMut","useSendBatchTx","swapTxMined","useAwaitTx","hash","txHash","batchTxMined","useAwaitCalls","id","swap","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isLoading","isTxMined","isTxAwaitingError","lastCallsReceipt","receipts","length","swapBatch","callsId","transactionHash","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","address","account","useAccount","ensureTxReceipt","useEnsureTxReceipt","ensureCallsStatus","useEnsureCallsStatus","currentAbortControllerRef","useRef","usingPriceRef","cancelFlow","current","abort","UserCancelledError","receiverAddress","useSwapReceiverAddressValue","markNonceAsUsed","clearNonce","useMarkPermit1Or2NonceAsUsed","constructGasParams","useConstructGasParams","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","usePartner","subscribeToPrice","useSubscribeToMarketPrice","onSwap","useWidgetEvents","submitSwapTx","onTxSent","lastPrice","reset","assert","abortController","AbortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","freshPrice","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldBatchTxs","needsApproval","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","applySlippage","destAmount","BigInt","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","onReplaced","action","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","marketPriceToUse","gasParams","swapRequest","swapTxInput","userAddress","receiver","destToken","srcDecimals","destDecimals","takeSurplus","priceRoute","swapTxOptions","ignoreGasEstimate","ignoreAllowance","degenMode","txParams","mutateAsync","swapTxHash","swapCallsId","event","name","params","swapMode","price","calls","txsParams","to","from","approveProps","sendCallsResult","sendCalls","sendTransactionAsync","signedPermitData","swapCallsReceipt","swapTxReceipt","sendCallsReceiptPromise","then","status","source","srcTokenAddress","destTokenAddress","srcAmountUSD","srcUSD","destAmountUSD","destUSD","gasCost","callsReceipt","swapTxReceiptPromise","gasCostUSD","tradeFlowType","approve","marketSwapMut","useMutation","mutationFn","mutationKey","onSettled","runMarketSwapFlow","retryFlow","options","usedPrice","submittedSwapRequest"],"mappings":"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"}
1
+ {"version":3,"file":"useMarketFlow.js","sources":["../../../../src/hooks/swap/tradeFlow/useMarketFlow.ts"],"sourcesContent":["import { useAwaitTx } from \"@/hooks/txs\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { useSendMarketSwapTx } from \"../prices/market/mutations/useSendMarketSwapTx\";\nimport {\n useBuildTx,\n type BuildMarketSwapTxInput,\n} from \"../prices/market/mutations/useBuildTx\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport {\n type Address,\n type Hash,\n type Hex,\n type TransactionReceipt,\n} from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport {\n isTransactionCancelledError,\n TransactionCancelledError,\n UserCancelledError,\n} from \"./common/errors\";\nimport { useSwapReceiverAddressValue } from \"@/components/widget/ReceiverAddress/state/receiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport { useConstructGasParams } from \"./common/useConstructGasParams\";\nimport {\n useMarketPriceQuery,\n useSubscribeToMarketPrice,\n} from \"../prices/market/queries/useMarketPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\n\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { type CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport type { BatchTxStepResult } from \"./common/types\";\nimport { usePricesParams } from \"../prices/usePricesParams\";\nimport {\n useReplaceTx,\n type ReplaceTxResult,\n} from \"@/hooks/txs/mutations/useReplaceTx\";\nimport type { CancelOrderStepKey } from \"@/components/widget/TradeOverview/steps\";\n\nexport type UseMarketFlowInput = {\n marketPrice?: OptimalRate;\n};\n\nexport type MarketSwapRequest = BuildMarketSwapTxInput & {\n // narrow down BuildMarketSwapTxInput from \"any two present\" {srcAmount?, destAmount?, slippage?}\n // to \"amounts always present\" variant\n swapTxInput: { srcAmount: string; destAmount: string };\n};\n\nconst marketSwapFlowType = \"marketSwap\";\n\nexport type SubmitSwapResult = {\n tradeFlowType: typeof marketSwapFlowType;\n approve: SubmitTxResult;\n swap: SubmitTxResult & { swapRequest?: MarketSwapRequest };\n marketPrice: OptimalRate;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt}) when mined,\n// maybe??\ntype RunMarketOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseMarketFlowResult = {\n tradeFlowType: typeof marketSwapFlowType;\n chainId: SupportedChainId;\n runMarketSwapFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n buildTxParams: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swap: {\n txHash?: Hash;\n receipt?: TransactionReceipt;\n isConfirmingTX: boolean;\n isConfirmingTxError: boolean;\n isTxSent: boolean;\n isTxPending: boolean;\n isTxMined: boolean;\n isTxAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n isTxCancellable: boolean;\n cancelSwapTx: () => Promise<ReplaceTxResult | undefined>;\n cancellingState: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n result?: ReplaceTxResult;\n step?: CancelOrderStepKey;\n };\n error: Error | null;\n };\n swapBatch: BatchTxStepResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitSwapResult;\n usedPrice?: OptimalRate;\n freshPrice?: OptimalRate;\n submittedSwapRequest?: MarketSwapRequest;\n};\n\nconst MARKET_SWAP_MUTATION_KEY = \"runMarketSwapFlow\";\n\nexport function useMarketFlow({\n marketPrice: _marketPrice,\n}: UseMarketFlowInput): UseMarketFlowResult {\n const logger = useLogger(\"MarketFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n const swapSideFromInput = useSwapSide();\n\n const { priceParams, chainId } = usePricesParams(\"swap\");\n\n const { result: marketPriceQuery, queryKey: marketPriceQueryKey } =\n useMarketPriceQuery({\n priceParams,\n chainId,\n query: {\n enabled: false,\n },\n });\n\n const marketPrice = marketPriceQuery.data || _marketPrice;\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 2.2. sign Permit1 \n\n 3. await Approve tx (if not using Permit) \n */\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: marketPrice?.srcToken,\n // if we already approved some amount, save it in approval and signPermit objects\n srcAmount: marketPrice?.srcAmount,\n spenderContractType: \"AugustusSwapper\",\n // marketPrice is the preferred source of truth\n swapSide: marketPrice?.side ?? swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4. Build Swap tx */\n const buildTxMut = useBuildTx({\n chainId,\n mutationOptions: {\n onSuccess: () => {\n logger.log(\"Build tx success\");\n },\n onError: (error) => {\n logger.error(\"Build tx error\", error);\n },\n },\n });\n\n const buildTxParams: UseMarketFlowResult[\"buildTxParams\"] = {\n isPending: buildTxMut.isPending,\n isError: buildTxMut.isError,\n isSuccess: buildTxMut.isSuccess,\n error: buildTxMut.error,\n };\n\n /* 5. submit Swap tx */\n\n /* 5.1. submit standalone Swap tx */\n\n const sendSwapTxMut = useSendMarketSwapTx({\n onSuccess: () => {\n logger.log(\"Swap tx success\");\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n });\n\n /* 5.2. submit Batch tx */\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 6. await Swap tx */\n\n /* 6.1. await standalone Swap tx */\n const swapTxMined = useAwaitTx({\n hash: sendSwapTxMut.txHash,\n chainId,\n });\n\n /* 6.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const cancelSwapTxMut = useReplaceTx({\n chainId,\n txHash: sendSwapTxMut.txHash,\n cancelTxType: \"SWAP\",\n onSuccess: (details) => {\n onSwap?.({\n event: {\n name: \"Swap:cancelled\",\n params: {\n swapMode: \"market\",\n cancelTxDetails: details,\n },\n },\n });\n },\n });\n\n // allows to abort (cancel) currently running flow,\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n\n const cancelSwapTx = async () => {\n try {\n assert(sendSwapTxMut.txHash, \"Swap tx hash is not available\");\n const result = await cancelSwapTxMut.replaceTx({\n action: \"cancel\",\n hash: sendSwapTxMut.txHash,\n });\n if (result.replacementTxReceipt.status === \"success\") {\n currentAbortControllerRef.current?.abort(\n new TransactionCancelledError(\"Swap tx cancelled\", result)\n );\n }\n return result;\n } catch (error) {\n logger.error(\"Cancel swap tx error\", error);\n // allow to re-trigger cancellation after error (like UserCancelledError)\n cancelSwapTxMut.reset();\n }\n };\n\n const swap: UseMarketFlowResult[\"swap\"] = {\n txHash: sendSwapTxMut.txHash,\n receipt: swapTxMined.data,\n /* tx sending */\n isConfirmingTX: sendSwapTxMut.isPending,\n isConfirmingTxError: sendSwapTxMut.isError,\n isTxSent: sendSwapTxMut.isSuccess,\n /* tx awaiting */\n isTxPending: swapTxMined.isLoading,\n isTxMined: swapTxMined.isSuccess,\n isTxAwaitingError: swapTxMined.isError,\n /* combined */\n isPending: sendSwapTxMut.isPending || swapTxMined.isLoading,\n isSuccess: swapTxMined.isSuccess, // final success\n isError: sendSwapTxMut.isError || swapTxMined.isError,\n error: sendSwapTxMut.error || swapTxMined.error,\n isTxCancellable:\n cancelSwapTxMut.isWalletSupported &&\n // allow to retry cancel (no !cancelSwapTxMut.isPending check) if the Cancel tx is slow\n !!sendSwapTxMut.txHash &&\n !swapTxMined.data &&\n !cancelSwapTxMut.isSuccess,\n cancelSwapTx,\n cancellingState: {\n isPending: cancelSwapTxMut.isPending,\n isError: cancelSwapTxMut.isError,\n isSuccess: cancelSwapTxMut.isSuccess,\n error: cancelSwapTxMut.error,\n result: cancelSwapTxMut.result,\n step: cancelSwapTxMut.step,\n },\n };\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const swapBatch: UseMarketFlowResult[\"swapBatch\"] = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n const { address: account } = useAccount();\n\n const ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\n\n const usingPriceRef = useRef<OptimalRate | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { constructGasParams } = useConstructGasParams();\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n\n const subscribeToPrice = useSubscribeToMarketPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitSwapTx: (\n options?: RunMarketOptions & { lastPrice?: OptimalRate | null }\n ) => Promise<SubmitSwapResult> = async ({ onTxSent, lastPrice } = {}) => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n cancelSwapTxMut.reset();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and deltaPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(marketPrice, \"Market price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the syncronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // marketPrice here is the starting price, available before async code and waiting\n let freshPrice = marketPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Swap tx, because it failed the last time,\n // but the price hasn't updated yet, so force refetch\n const newPriceResult = await marketPriceQuery.refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const queryKey = marketPriceQueryKey;\n\n // should always be available\n if (queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey,\n onData: (newPrice) => {\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n // slightly higher amount if BUY with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n newPrice.side\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n // Token doesn't support Permit\n // make an Approval tx\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n } else {\n approveOrPermitEvents.onSignPermit.request({\n allowanceToSet: allowanceToPermit,\n });\n\n // sign Permit\n signedPermitResult = await signPermitMut.signPermitAsync({\n value: allowanceToPermit,\n });\n\n approveOrPermitEvents.onSignPermit.confirmed({\n allowanceToSet: allowanceToPermit,\n permit: signedPermitResult?.permitEncodedArgs,\n });\n }\n } catch (error) {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n } else {\n approveOrPermitEvents.onSignPermit.failed({\n allowanceToSet: allowanceToPermit,\n error: error as Error,\n });\n }\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const marketPriceToUse = freshPrice;\n usingPriceRef.current = marketPriceToUse;\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(marketPriceToUse, \"Market price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: marketPriceToUse.srcAmount,\n destAmount: marketPriceToUse.destAmount,\n },\n resolvedSlippage,\n marketPriceToUse.side\n );\n\n // fresh gas params\n const gasParams = constructGasParams();\n\n const swapRequest: MarketSwapRequest = {\n swapTxInput: {\n userAddress: account,\n receiver: receiverAddress,\n srcToken: marketPriceToUse.srcToken,\n destToken: marketPriceToUse.destToken,\n srcDecimals: marketPriceToUse.srcDecimals,\n destDecimals: marketPriceToUse.destDecimals,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n takeSurplus: partnerTakesSurplus,\n\n permit: signedPermitResult?.permitEncodedArgs, // just signed Permit signature\n\n priceRoute: marketPriceToUse,\n ...amountsAfterSlippage,\n },\n\n swapTxOptions: {\n // ignoreChecks: true,\n // gas estimate will break if only swap tx is estimated, but approve tx is not considered in a batch\n ignoreGasEstimate: shouldBatchTxs,\n // for Batch-capable wallets batch Approve+Swap tx have to ignore all checks\n ignoreAllowance: shouldBatchTxs,\n // onlyParams: true,\n degenMode: priceParams.degenMode,\n ...gasParams,\n },\n };\n\n const txParams = await buildTxMut.mutateAsync(swapRequest);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n let swapTxHash: Hash | undefined;\n let swapCallsId: string | undefined;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n },\n },\n });\n\n if (shouldBatchTxs) {\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: txParams.to as Address,\n account: txParams.from as Address,\n data: txParams.data as Hex,\n value: BigInt(txParams.value),\n chainId: txParams.chainId,\n },\n ],\n approveProps: [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ],\n });\n\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n swapCallsId = sendCallsResult.id;\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsId: swapCallsId,\n },\n },\n });\n } else {\n swapTxHash = await sendSwapTxMut.sendTransactionAsync({\n ...txParams,\n chainId,\n });\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txHash: swapTxHash,\n },\n },\n });\n }\n\n // no use aborting past this point, tx is already sent,\n // but we may want to connect this late abortion to tx cancellation, in the future\n\n // tx is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n let swapCallsReceipt: CallsReceipt | undefined;\n let swapTxReceipt: TransactionReceipt | undefined;\n\n if (swapCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: swapCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ swapTx ~ awaiting calls id :\", swapCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n callsId: swapCallsId,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n swapSide: marketPriceToUse.side,\n },\n });\n }\n\n swapCallsReceipt = await sendCallsReceiptPromise;\n\n if (swapCallsReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsReceipt: swapCallsReceipt,\n callsId: swapCallsId,\n },\n },\n });\n }\n } else if (swapTxHash) {\n const swapTxReceiptPromise = ensureTxReceipt({\n hash: swapTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:swapTx\", swapTxHash, data);\n },\n });\n\n logger.log(\"~ swapTx ~ awaiting tx hash :\", swapTxHash);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n // watch for signal to potentially get aborted after a cancel tx is mined\n const txCancelledPromise = new Promise<never>((_, reject) => {\n signal.onabort = () => {\n try {\n signal.throwIfAborted();\n } catch (error) {\n if (isTransactionCancelledError(error)) {\n reject(error);\n }\n }\n };\n });\n\n // whichever happens first:\n // - original swap tx is mined (not reverted) and swapTxReceiptPromise resolves\n // - the abort signal fires (e.g. after a cancel/replace tx is mined) and the race rejects\n // if the original tx is replaced/cancelled, ensureTxReceipt will never resolve (or reject if given a timeout)\n const txReceiptOrCancelledPromise = Promise.race([\n swapTxReceiptPromise,\n txCancelledPromise,\n ]);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n transactionHash: swapTxHash,\n receiptPromise: txReceiptOrCancelledPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n gasCostUSD: marketPriceToUse.gasCostUSD,\n swapSide: marketPriceToUse.side,\n },\n });\n }\n\n swapTxReceipt = await txReceiptOrCancelledPromise;\n\n if (swapTxReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txReceipt: swapTxReceipt,\n txHash: swapTxHash,\n },\n },\n });\n }\n }\n\n logger.log(\"~ swapTx ~ receipt:\", swapCallsReceipt || swapTxReceipt);\n\n return {\n tradeFlowType: marketSwapFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n swap: {\n swapRequest,\n callsId: swapCallsId,\n txHash: swapTxHash,\n receipt: swapTxReceipt,\n callsReceipt: swapCallsReceipt,\n },\n marketPrice: marketPriceToUse,\n // @TODO add whatever else may be relevant\n account,\n receiverAddress,\n };\n } catch (error) {\n // Market swap failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n // or even Order in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n\n if (!isTransactionCancelledError(error)) {\n // Swap:cancelled event is handled in cancelSwapTxMut.onSuccess\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"market\",\n error: error as Error,\n },\n },\n });\n }\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const marketSwapMut = useMutation({\n mutationFn: submitSwapTx,\n mutationKey: [MARKET_SWAP_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Swap tx success\", data);\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n onSettled: () => {\n logger.log(\"Swap tx settled\");\n },\n });\n\n const runMarketSwapFlow = marketSwapMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n marketSwapMut.reset();\n\n cancelSwapTxMut.reset();\n };\n\n const retryFlow = (options?: RunMarketOptions): Promise<SubmitSwapResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runMarketSwapFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice = usingPriceRef.current || marketPrice;\n\n const result = marketSwapMut.data;\n const submittedSwapRequest = result?.swap.swapRequest;\n\n /* 7. return result */\n return {\n tradeFlowType: marketSwapFlowType,\n chainId,\n runMarketSwapFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n buildTxParams,\n swap,\n swapBatch,\n // marketSwapMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: marketSwapMut.isPending,\n isSuccess: marketSwapMut.isSuccess,\n isError: marketSwapMut.isError,\n error: marketSwapMut.error,\n result: marketSwapMut.data,\n usedPrice,\n freshPrice: marketPrice,\n submittedSwapRequest,\n };\n}\n"],"names":["marketSwapFlowType","MARKET_SWAP_MUTATION_KEY","useMarketFlow","marketPrice","_marketPrice","logger","useLogger","resolvedSlippage","useSlippage","swapSideFromInput","useSwapSide","priceParams","chainId","usePricesParams","result","marketPriceQuery","queryKey","marketPriceQueryKey","useMarketPriceQuery","query","enabled","data","approval","signPermit","approveTxMut","signPermitMut","events","approveOrPermitEvents","useApproveOrPermit","srcToken","srcAmount","spenderContractType","swapSide","side","tradeMode","buildTxMut","useBuildTx","mutationOptions","onSuccess","log","onError","error","buildTxParams","isPending","isError","isSuccess","sendSwapTxMut","useSendMarketSwapTx","forCurrentChain","canBatchTxs","useCanBatchTxs","addTxWithApprovals","useBatchWithApproveTxs","batchTxMut","useSendBatchTx","swapTxMined","useAwaitTx","hash","txHash","batchTxMined","useAwaitCalls","id","cancelSwapTxMut","useReplaceTx","cancelTxType","details","onSwap","event","name","params","swapMode","cancelTxDetails","currentAbortControllerRef","useRef","cancelSwapTx","assert","replaceTx","action","replacementTxReceipt","status","current","abort","TransactionCancelledError","reset","swap","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isLoading","isTxMined","isTxAwaitingError","isTxCancellable","isWalletSupported","cancellingState","step","lastCallsReceipt","receipts","length","swapBatch","callsId","transactionHash","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","address","account","useAccount","ensureTxReceipt","useEnsureTxReceipt","ensureCallsStatus","useEnsureCallsStatus","usingPriceRef","cancelFlow","UserCancelledError","receiverAddress","useSwapReceiverAddressValue","markNonceAsUsed","clearNonce","useMarkPermit1Or2NonceAsUsed","constructGasParams","useConstructGasParams","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","usePartner","subscribeToPrice","useSubscribeToMarketPrice","useWidgetEvents","submitSwapTx","onTxSent","lastPrice","abortController","AbortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","freshPrice","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldBatchTxs","needsApproval","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","applySlippage","destAmount","BigInt","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","onReplaced","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","marketPriceToUse","gasParams","swapRequest","swapTxInput","userAddress","receiver","destToken","srcDecimals","destDecimals","takeSurplus","priceRoute","swapTxOptions","ignoreGasEstimate","ignoreAllowance","degenMode","txParams","mutateAsync","swapTxHash","swapCallsId","price","calls","txsParams","to","from","approveProps","sendCallsResult","sendCalls","sendTransactionAsync","signedPermitData","swapCallsReceipt","swapTxReceipt","sendCallsReceiptPromise","then","source","srcTokenAddress","destTokenAddress","srcAmountUSD","srcUSD","destAmountUSD","destUSD","gasCost","callsReceipt","swapTxReceiptPromise","txCancelledPromise","Promise","_","reject","onabort","isTransactionCancelledError","txReceiptOrCancelledPromise","race","gasCostUSD","tradeFlowType","approve","marketSwapMut","useMutation","mutationFn","mutationKey","onSettled","runMarketSwapFlow","retryFlow","options","usedPrice","submittedSwapRequest"],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { MarketSwapStep, MarketSwapStepKey } from '../../../components/widget/TradeOverview/steps';
1
+ import { CancelOrderStepKey, MarketSwapStep, MarketSwapStepKey } from '../../../components/widget/TradeOverview/steps';
2
2
  import { UseMarketFlowInput, UseMarketFlowResult, SubmitSwapResult } from './useMarketFlow';
3
+ import { ReplaceTxResult } from '../../txs/mutations/useReplaceTx';
3
4
  type UseMarketSwapStepResult = {
4
5
  startMarketSwap: UseMarketFlowResult["runMarketSwapFlow"];
5
6
  reset: UseMarketFlowResult["reset"];
@@ -8,6 +9,10 @@ type UseMarketSwapStepResult = {
8
9
  goToBeforeSwap: () => void;
9
10
  isNonFlowStep: boolean;
10
11
  isFlowCancellable: boolean;
12
+ isSwapTxCancellable: boolean;
13
+ isSwapTxCancelled: boolean;
14
+ cancelSwapTxResult?: ReplaceTxResult;
15
+ cancelSwapTx: UseMarketFlowResult["swap"]["cancelSwapTx"];
11
16
  step?: MarketSwapStep;
12
17
  explorerLink?: string;
13
18
  error: Error | null;
@@ -16,6 +21,7 @@ type UseMarketSwapStepResult = {
16
21
  usedPrice: UseMarketFlowResult["usedPrice"];
17
22
  submittedSwapRequest?: UseMarketFlowResult["submittedSwapRequest"];
18
23
  tradeFlowType: UseMarketFlowResult["tradeFlowType"];
24
+ swapTxCancellationStep?: CancelOrderStepKey;
19
25
  };
20
26
  export declare function useMarketSwapStep(options: UseMarketFlowInput): UseMarketSwapStepResult;
21
27
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"useMarketSwapStep.d.ts","sourceRoot":"","sources":["../../../../src/hooks/swap/tradeFlow/useMarketSwapStep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EAElB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAOzB,KAAK,uBAAuB,GAAG;IAC7B,eAAe,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAE1D,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpC,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC9C,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAE,mBAAmB,CAAC,sBAAsB,CAAC,CAAC;IACnE,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;CACrD,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,uBAAuB,CAwLzB"}
1
+ {"version":3,"file":"useMarketSwapStep.d.ts","sourceRoot":"","sources":["../../../../src/hooks/swap/tradeFlow/useMarketSwapStep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EAElB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E,KAAK,uBAAuB,GAAG;IAC7B,eAAe,EAAE,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;IAE1D,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACpC,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,CAAC;IAC9C,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,CAAC,EAAE,eAAe,CAAC;IACrC,YAAY,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;IAC1D,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAE,mBAAmB,CAAC,sBAAsB,CAAC,CAAC;IACnE,aAAa,EAAE,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACpD,sBAAsB,CAAC,EAAE,kBAAkB,CAAC;CAC7C,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,kBAAkB,GAC1B,uBAAuB,CAwMzB"}