@velora-dex/widget 0.4.3 → 0.4.4

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 (163) hide show
  1. package/dist/components/widget/AppHeader/Activities/Drawers.d.ts.map +1 -1
  2. package/dist/components/widget/AppHeader/Activities/Drawers.js +18 -23
  3. package/dist/components/widget/AppHeader/Activities/Drawers.js.map +1 -1
  4. package/dist/components/widget/Button/CancelButton/CancelButton.d.ts +7 -0
  5. package/dist/components/widget/Button/CancelButton/CancelButton.d.ts.map +1 -0
  6. package/dist/components/widget/Button/CancelButton/CancelButton.js +102 -0
  7. package/dist/components/widget/Button/CancelButton/CancelButton.js.map +1 -0
  8. package/dist/components/widget/Button/CancelButton/constants.d.ts +2 -0
  9. package/dist/components/widget/Button/CancelButton/constants.d.ts.map +1 -0
  10. package/dist/components/widget/Button/CancelButton/constants.js +4 -0
  11. package/dist/components/widget/Button/CancelButton/constants.js.map +1 -0
  12. package/dist/components/widget/Button/DismissButton.d.ts +4 -0
  13. package/dist/components/widget/Button/DismissButton.d.ts.map +1 -0
  14. package/dist/components/widget/Button/DismissButton.js +29 -0
  15. package/dist/components/widget/Button/DismissButton.js.map +1 -0
  16. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.d.ts +6 -4
  17. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.d.ts.map +1 -1
  18. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js +133 -147
  19. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/Controls.js.map +1 -1
  20. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.d.ts +2 -2
  21. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.d.ts.map +1 -1
  22. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js +138 -55
  23. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/LimitOrderDetails.js.map +1 -1
  24. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.d.ts +2 -2
  25. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.d.ts.map +1 -1
  26. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js +2 -2
  27. package/dist/components/widget/LimitOrderItem/LimitOrderDetails/utils.js.map +1 -1
  28. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/OtcOrderDetails.js +1 -1
  29. package/dist/components/widget/OtcOrderItem/OtcOrderDetails/OtcOrderDetails.js.map +1 -1
  30. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.d.ts +2 -2
  31. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.d.ts.map +1 -1
  32. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js +95 -107
  33. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js.map +1 -1
  34. package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.d.ts +1 -1
  35. package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.d.ts.map +1 -1
  36. package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.js +89 -60
  37. package/dist/components/widget/TradeOverview/LimitOrderTradeOverview.js.map +1 -1
  38. package/dist/components/widget/TradeOverview/OtcOrderTradeOverview.d.ts.map +1 -1
  39. package/dist/components/widget/TradeOverview/OtcOrderTradeOverview.js +2 -3
  40. package/dist/components/widget/TradeOverview/OtcOrderTradeOverview.js.map +1 -1
  41. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.d.ts.map +1 -1
  42. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js +3 -5
  43. package/dist/components/widget/TradeOverview/TradeComplete/TradeCompleteFooter.js.map +1 -1
  44. package/dist/components/widget/TradeOverview/TradeError/utils.js.map +1 -1
  45. package/dist/components/widget/TradeOverview/TradeOverviewFooter.d.ts +2 -1
  46. package/dist/components/widget/TradeOverview/TradeOverviewFooter.d.ts.map +1 -1
  47. package/dist/components/widget/TradeOverview/TradeOverviewFooter.js +35 -28
  48. package/dist/components/widget/TradeOverview/TradeOverviewFooter.js.map +1 -1
  49. package/dist/components/widget/TradeOverview/utils/preWrap.d.ts +1 -4
  50. package/dist/components/widget/TradeOverview/utils/preWrap.d.ts.map +1 -1
  51. package/dist/components/widget/TradeOverview/utils/preWrap.js +3 -4
  52. package/dist/components/widget/TradeOverview/utils/preWrap.js.map +1 -1
  53. package/dist/components/widget/WrapEth/hooks/useWrapEthProps.d.ts +0 -2
  54. package/dist/components/widget/WrapEth/hooks/useWrapEthProps.d.ts.map +1 -1
  55. package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js +3 -236
  56. package/dist/components/widget/WrapEth/hooks/useWrapEthProps.js.map +1 -1
  57. package/dist/core/LimitOrderButton.d.ts.map +1 -1
  58. package/dist/core/LimitOrderButton.js +18 -40
  59. package/dist/core/LimitOrderButton.js.map +1 -1
  60. package/dist/core/index.d.ts.map +1 -1
  61. package/dist/core/index.js +24 -46
  62. package/dist/core/index.js.map +1 -1
  63. package/dist/core/inputs/hooks/useTokenFromInputProps.js +2 -2
  64. package/dist/core/inputs/hooks/useTokenFromInputProps.js.map +1 -1
  65. package/dist/core/limit/useLimitRate.d.ts.map +1 -1
  66. package/dist/core/limit/useLimitRate.js +36 -53
  67. package/dist/core/limit/useLimitRate.js.map +1 -1
  68. package/dist/core/limit/useLimitTokenFromInputProps.js +2 -2
  69. package/dist/core/limit/useLimitTokenFromInputProps.js.map +1 -1
  70. package/dist/events/types/cancel.d.ts +7 -1
  71. package/dist/events/types/cancel.d.ts.map +1 -1
  72. package/dist/events/types/index.d.ts.map +1 -1
  73. package/dist/hooks/swap/prices/delta/mutations/types.d.ts +7 -0
  74. package/dist/hooks/swap/prices/delta/mutations/types.d.ts.map +1 -0
  75. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.d.ts +1 -7
  76. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.d.ts.map +1 -1
  77. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.js +13 -85
  78. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrders.js.map +1 -1
  79. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.d.ts +11 -0
  80. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.d.ts.map +1 -0
  81. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js +87 -0
  82. package/dist/hooks/swap/prices/delta/mutations/useCancelDeltaOrdersEvents.js.map +1 -0
  83. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.d.ts +32 -0
  84. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.d.ts.map +1 -0
  85. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js +248 -0
  86. package/dist/hooks/swap/prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js.map +1 -0
  87. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.d.ts +23 -10
  88. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.d.ts.map +1 -1
  89. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js +82 -36
  90. package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
  91. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.d.ts +4 -9
  92. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.d.ts.map +1 -1
  93. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js +8 -11
  94. package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js.map +1 -1
  95. package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.d.ts +18 -0
  96. package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.d.ts.map +1 -0
  97. package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js +85 -0
  98. package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js.map +1 -0
  99. package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.d.ts +17 -0
  100. package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.d.ts.map +1 -0
  101. package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.js +80 -0
  102. package/dist/hooks/swap/prices/delta/mutations/useSendDepositPreSignDeltaOrderTx.js.map +1 -0
  103. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.d.ts +44 -0
  104. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.d.ts.map +1 -0
  105. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js +262 -0
  106. package/dist/hooks/swap/prices/delta/mutations/useWithdrawAndCancelDeltaOrder.js.map +1 -0
  107. package/dist/hooks/swap/prices/delta/mutations/utils.d.ts +13 -0
  108. package/dist/hooks/swap/prices/delta/mutations/utils.d.ts.map +1 -0
  109. package/dist/hooks/swap/prices/delta/mutations/utils.js +23 -0
  110. package/dist/hooks/swap/prices/delta/mutations/utils.js.map +1 -0
  111. package/dist/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance.d.ts.map +1 -1
  112. package/dist/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance.js +1 -2
  113. package/dist/hooks/swap/prices/delta/queries/useDeltaLimitOrderRequiredBalance.js.map +1 -1
  114. package/dist/hooks/swap/prices/delta/queries/useIsDeltaNonceUsed.d.ts +109 -0
  115. package/dist/hooks/swap/prices/delta/queries/useIsDeltaNonceUsed.d.ts.map +1 -0
  116. package/dist/hooks/swap/prices/delta/queries/useIsDeltaNonceUsed.js +170 -0
  117. package/dist/hooks/swap/prices/delta/queries/useIsDeltaNonceUsed.js.map +1 -0
  118. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.d.ts +3 -2
  119. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.d.ts.map +1 -1
  120. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js +8 -2
  121. package/dist/hooks/swap/prices/delta/queries/useWatchDeltaOrder.js.map +1 -1
  122. package/dist/hooks/swap/prices/usePricesParams.d.ts +1 -5
  123. package/dist/hooks/swap/prices/usePricesParams.d.ts.map +1 -1
  124. package/dist/hooks/swap/prices/usePricesParams.js +9 -20
  125. package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
  126. package/dist/hooks/swap/prices/useSwapPrices.d.ts.map +1 -1
  127. package/dist/hooks/swap/prices/useSwapPrices.js +137 -149
  128. package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
  129. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.d.ts +69 -0
  130. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.d.ts.map +1 -0
  131. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js +159 -0
  132. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js.map +1 -0
  133. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.d.ts +5 -7
  134. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.d.ts.map +1 -1
  135. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js +1 -20
  136. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js.map +1 -1
  137. package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts +9 -4
  138. package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts.map +1 -1
  139. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js +70 -84
  140. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
  141. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.d.ts +2 -1
  142. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.d.ts.map +1 -1
  143. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js +104 -99
  144. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
  145. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.d.ts +7 -4
  146. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.d.ts.map +1 -1
  147. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js +70 -84
  148. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
  149. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.d.ts.map +1 -1
  150. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js +25 -34
  151. package/dist/hooks/swap/tradeFlow/useLimitOrderStep.js.map +1 -1
  152. package/dist/hooks/useSDK.d.ts +2 -2
  153. package/dist/hooks/useSDK.d.ts.map +1 -1
  154. package/dist/hooks/useSDK.js +2 -2
  155. package/dist/hooks/useSDK.js.map +1 -1
  156. package/dist/lib/constants/index.d.ts +1 -0
  157. package/dist/lib/constants/index.d.ts.map +1 -1
  158. package/dist/lib/constants/index.js +2 -1
  159. package/dist/lib/constants/index.js.map +1 -1
  160. package/dist/styles.css +3 -0
  161. package/dist/transactions/types.d.ts +9 -1
  162. package/dist/transactions/types.d.ts.map +1 -1
  163. package/package.json +2 -2
@@ -2,9 +2,9 @@ import { useAccount } from 'wagmi';
2
2
  import { assert } from 'ts-essentials';
3
3
  import { useEnsureTxReceipt } from '../../txs/queries/useAwaitTx.js';
4
4
  import { deltaOrdersQueryKey } from '../prices/delta/queries/useDeltaOrders.js';
5
- import { useCreateDeltaOrder } from '../prices/delta/mutations/useCreateDeltaOrder.js';
5
+ import { useCreateAndSubmitDeltaOrder } from '../prices/delta/mutations/useCreateDeltaOrder.js';
6
6
  import { useMinViemClient } from '../../useMinViemClient.js';
7
- import { useWatchDeltaAuction, deltaAuctionPollingQueryKey, useEnsureDeltaOrderExecuted } from '../prices/delta/queries/useWatchDeltaOrder.js';
7
+ import { useWatchDeltaAuction, useEnsureDeltaOrderExecuted } from '../prices/delta/queries/useWatchDeltaOrder.js';
8
8
  import { getOverallOrderStatus } from '../prices/delta/orders/utils.js';
9
9
  import { applySlippage } from '../../../lib/utils/price.js';
10
10
  import { useSlippage } from '../../useSlippage.js';
@@ -27,17 +27,16 @@ import { extractSelectedBridgePrice } from '../prices/delta/bridge/utils.js';
27
27
  import { useAtomValue } from '../../../core/store.js';
28
28
  import { bridgePreferenceAtom } from '../../../components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.js';
29
29
  import { protocolNameAtom } from '../../../components/widget/TradeParameters/state/bridgePreferences/protocolNameAtom.js';
30
- import { useCancelDeltaOrderEventCallbacks, useCancelDeltaOrders } from '../prices/delta/mutations/useCancelDeltaOrders.js';
31
- import { useChainMatches } from '../../useChainMatches.js';
32
- import { useSwitchChainWithGuard } from '../../useSwitchChainWithGuard.js';
30
+ import { useDepositAndSubmitDeltaOrder } from './common/useDepositAndSubmitDeltaOrder.js';
31
+ import { isETHaddress } from '../../../tokens/utils/eth.js';
32
+ import { useCancelOrWithdrawAndCancelDeltaOrder } from '../prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder.js';
33
33
  import { usePricesParams, useExtraDeltaPriceParams } from '../prices/usePricesParams.js';
34
34
  import { useSelectedBridgePrice } from '../prices/delta/bridge/useSelectedBridgePrice.js';
35
35
 
36
36
  const deltaOrderFlowType = "deltaOrder";
37
37
  const DELTA_ORDER_MUTATION_KEY = "runDeltaOrderFlow";
38
38
  function useDeltaFlow({
39
- deltaPrice: _deltaPrice,
40
- preWrapETH
39
+ deltaPrice: _deltaPrice
41
40
  }) {
42
41
  const logger = useLogger("DeltaFlow");
43
42
  const {
@@ -48,10 +47,7 @@ function useDeltaFlow({
48
47
  chainId,
49
48
  destChainId
50
49
  } = usePricesParams("swap");
51
- const extraDeltaPriceParams = useExtraDeltaPriceParams({
52
- srcToken: priceParams.srcToken,
53
- chainId
54
- });
50
+ const extraDeltaPriceParams = useExtraDeltaPriceParams();
55
51
  const {
56
52
  result: deltaPriceQuery,
57
53
  queryKey: deltaPriceQueryKey
@@ -95,7 +91,7 @@ function useDeltaFlow({
95
91
  account
96
92
  });
97
93
  const queryClient = useQueryClient();
98
- const createOrderMut = useCreateDeltaOrder({
94
+ const createAndSubmitOrderMut = useCreateAndSubmitDeltaOrder({
99
95
  chainId,
100
96
  account,
101
97
  client: minClient,
@@ -109,13 +105,14 @@ function useDeltaFlow({
109
105
  }
110
106
  });
111
107
  const deltaOrderCreateAndSubmit = {
112
- order: createOrderMut.data,
113
- isCreatingOrder: createOrderMut.isPending,
114
- isOrderSent: createOrderMut.isSuccess,
115
- isPending: createOrderMut.isPending,
116
- isError: createOrderMut.isError,
117
- isSuccess: createOrderMut.isSuccess,
118
- error: createOrderMut.error
108
+ order: createAndSubmitOrderMut.order,
109
+ isCreatingOrder: createAndSubmitOrderMut.isPending,
110
+ isPostingOrder: createAndSubmitOrderMut.isPostingOrder,
111
+ isOrderSent: createAndSubmitOrderMut.isSuccess,
112
+ isPending: createAndSubmitOrderMut.isPending,
113
+ isError: createAndSubmitOrderMut.isError,
114
+ isSuccess: createAndSubmitOrderMut.isSuccess,
115
+ error: createAndSubmitOrderMut.error
119
116
  };
120
117
  const {
121
118
  deltaOrderPreSign,
@@ -129,14 +126,25 @@ function useDeltaFlow({
129
126
  logger,
130
127
  viemClient: minClient
131
128
  });
129
+ const {
130
+ deltaOrderDeposit,
131
+ reset: resetDepositAndSubmitDeltaOrder,
132
+ depositAndSubmitDeltaOrder
133
+ } = useDepositAndSubmitDeltaOrder({
134
+ chainId,
135
+ account,
136
+ logger,
137
+ viemClient: minClient
138
+ });
132
139
  const deltaOrderSubmission = {
133
- order: deltaOrderCreateAndSubmit.order || deltaOrderPreSign.order,
134
- isCreatingOrder: deltaOrderCreateAndSubmit.isPending || deltaOrderPreSign.isCreatingOrder,
135
- isOrderSent: deltaOrderCreateAndSubmit.isSuccess || deltaOrderPreSign.isOrderSent,
136
- isPending: deltaOrderCreateAndSubmit.isPending || deltaOrderPreSign.isPending,
137
- isError: deltaOrderCreateAndSubmit.isError || deltaOrderPreSign.isError,
138
- isSuccess: deltaOrderCreateAndSubmit.isSuccess || deltaOrderPreSign.isSuccess,
139
- error: deltaOrderCreateAndSubmit.error || deltaOrderPreSign.error
140
+ order: deltaOrderCreateAndSubmit.order || deltaOrderPreSign.order || deltaOrderDeposit.order,
141
+ isPostingOrder: deltaOrderCreateAndSubmit.isPostingOrder || deltaOrderPreSign.postingOrder.isPostingOrder || deltaOrderDeposit.postingOrder.isPostingOrder,
142
+ isCreatingOrder: deltaOrderCreateAndSubmit.isCreatingOrder || deltaOrderPreSign.isCreatingOrder || deltaOrderDeposit.isCreatingOrder,
143
+ isOrderSent: deltaOrderCreateAndSubmit.isOrderSent || deltaOrderPreSign.isOrderSent || deltaOrderDeposit.isOrderSent,
144
+ isPending: deltaOrderCreateAndSubmit.isPending || deltaOrderPreSign.isPending || deltaOrderDeposit.isPending,
145
+ isError: deltaOrderCreateAndSubmit.isError || deltaOrderPreSign.isError || deltaOrderDeposit.isError,
146
+ isSuccess: deltaOrderCreateAndSubmit.isSuccess || deltaOrderPreSign.isSuccess || deltaOrderDeposit.isSuccess,
147
+ error: deltaOrderCreateAndSubmit.error || deltaOrderPreSign.error || deltaOrderDeposit.error
140
148
  };
141
149
  const watchOrderExecution = useWatchDeltaAuction({
142
150
  orderId: deltaOrderSubmission.order?.id,
@@ -166,48 +174,19 @@ function useDeltaFlow({
166
174
  isSuccess: orderStatus === "confirmed",
167
175
  error: watchOrderExecution.error
168
176
  };
169
- const cancelOrderEvents = useCancelDeltaOrderEventCallbacks(createOrderMut.data);
170
- const orderChainId = deltaOrderSubmission.order?.chainId;
171
- const {
172
- forcedChainMatchesWalletChain
173
- } = useChainMatches(orderChainId);
174
- const {
175
- mutateAsync: switchChain
176
- } = useSwitchChainWithGuard();
177
- const cancelOrderMut = useCancelDeltaOrders({
177
+ const cancelOrderMut = useCancelOrWithdrawAndCancelDeltaOrder({
178
+ // supply the must up-to-date order for cancellation
179
+ order: deltaOrderExecution.lastOrderState || deltaOrderExecution.sentOrder,
178
180
  chainId,
179
181
  account,
180
182
  client: minClient,
181
- mutationOptions: {
182
- onMutate: async (variables) => {
183
- assert(orderChainId, "orderChainId is undefined");
184
- if (!forcedChainMatchesWalletChain) {
185
- await switchChain({
186
- chainId: orderChainId
187
- });
188
- }
189
- cancelOrderEvents.onMutate?.(variables);
190
- },
191
- onSuccess: (successResponse, vars) => {
192
- logger.log("Cancel Delta Order success", successResponse);
193
- if (deltaOrderExecution.sentOrder?.id) {
194
- queryClient.invalidateQueries({
195
- queryKey: deltaAuctionPollingQueryKey({
196
- orderId: deltaOrderExecution.sentOrder.id
197
- })
198
- });
199
- }
200
- cancelOrderEvents.onSuccess?.(successResponse, vars);
201
- },
202
- onError: (error_0, vars_0) => {
203
- logger.error("Cancel Delta Order error", error_0);
204
- cancelOrderEvents.onError?.(error_0, vars_0);
205
- }
206
- }
183
+ logger
207
184
  });
208
185
  const deltaOrderCancelation = {
186
+ receipt: cancelOrderMut.receipt,
209
187
  isCancelingOrder: cancelOrderMut.isPending,
210
- isOrderCanceled: cancelOrderMut.isSuccess && !!cancelOrderMut.data?.success,
188
+ isOrderCancellable: cancelOrderMut.isOrderCancellable,
189
+ isOrderCanceled: cancelOrderMut.isSuccess,
211
190
  isPending: cancelOrderMut.isPending,
212
191
  isError: cancelOrderMut.isError,
213
192
  isSuccess: cancelOrderMut.isSuccess,
@@ -265,9 +244,10 @@ function useDeltaFlow({
265
244
  } = {}) => {
266
245
  approveTxMut.reset();
267
246
  signPermitMut.reset();
268
- createOrderMut.reset();
247
+ createAndSubmitOrderMut.reset();
269
248
  cancelOrderMut.reset();
270
249
  resetPreSignAndSubmitDeltaOrder();
250
+ resetDepositAndSubmitDeltaOrder();
271
251
  assert(deltaPrice, "Delta price is not available");
272
252
  const swapSide = getSwapSideFromDeltaPrice(deltaPrice);
273
253
  const abortController = new AbortController();
@@ -298,13 +278,17 @@ function useDeltaFlow({
298
278
  }
299
279
  let unsubscribeFromPrice;
300
280
  usingPriceRef.current = freshPrice;
281
+ const shouldDepositAndPreSign = (
282
+ // @TODO [depositNativeAndPreSign] ensureDeltaEthBalance and compare with price.srcAmount to skip the deposit,
283
+ // or deposit the difference between user dETH balance and price.srcAmount to avoid unnecessary deposits
284
+ isETHaddress(freshPrice.srcToken)
285
+ );
301
286
  const {
302
287
  shouldDoApprovalTxOrPermit,
303
288
  tryPermit,
304
289
  shouldPreSignBatch
305
290
  } = shouldApproveOrBatch({
306
291
  approval,
307
- preWrapETH,
308
292
  signPermit,
309
293
  canBatchTxs,
310
294
  isConnectedToSafe
@@ -398,21 +382,21 @@ function useDeltaFlow({
398
382
  permit: signedPermitResult?.permitEncodedArgs
399
383
  });
400
384
  }
401
- } catch (error_2) {
385
+ } catch (error_1) {
402
386
  if (!tryPermit) {
403
387
  approveOrPermitEvents.onApproveTx.failed({
404
388
  allowanceToSet,
405
- error: error_2,
389
+ error: error_1,
406
390
  txHash: approveTxHash
407
391
  // won't necessarily be available
408
392
  });
409
393
  } else {
410
394
  approveOrPermitEvents.onSignPermit.failed({
411
395
  allowanceToSet: allowanceToPermit,
412
- error: error_2
396
+ error: error_1
413
397
  });
414
398
  }
415
- throw error_2;
399
+ throw error_1;
416
400
  }
417
401
  }
418
402
  signal.throwIfAborted();
@@ -464,15 +448,20 @@ function useDeltaFlow({
464
448
  side: swapSide
465
449
  }
466
450
  };
467
- if (!shouldPreSignBatch) {
468
- orderFromAPI = await createOrderMut.mutateAsync(createOrderInput);
469
- } else {
451
+ if (shouldDepositAndPreSign) {
452
+ orderFromAPI = await depositAndSubmitDeltaOrder({
453
+ createDeltaOrderInput: createOrderInput,
454
+ depositAmount: createOrderInput.orderInput.srcAmount,
455
+ onTxSent
456
+ });
457
+ } else if (shouldPreSignBatch) {
470
458
  orderFromAPI = await preSignAndSubmitDeltaOrder({
471
459
  createDeltaOrderInput: createOrderInput,
472
460
  approval,
473
- preWrapETH,
474
461
  onTxSent
475
462
  });
463
+ } else {
464
+ orderFromAPI = await createAndSubmitOrderMut.mutateAsync(createOrderInput);
476
465
  }
477
466
  if (signedPermitResult) {
478
467
  markNonceAsUsed(signedPermitResult.signedPermitData);
@@ -523,7 +512,7 @@ function useDeltaFlow({
523
512
  account,
524
513
  receiverAddress
525
514
  };
526
- } catch (error_1) {
515
+ } catch (error_0) {
527
516
  if (signedPermitResult) {
528
517
  clearNonce(signedPermitResult.signedPermitData);
529
518
  }
@@ -532,29 +521,24 @@ function useDeltaFlow({
532
521
  name: "Swap:failed",
533
522
  params: {
534
523
  swapMode: "delta",
535
- error: error_1
524
+ error: error_0
536
525
  }
537
526
  }
538
527
  });
539
- throw error_1;
528
+ throw error_0;
540
529
  } finally {
541
530
  unsubscribeFromPrice?.();
542
531
  }
543
532
  };
544
- const cancelDeltaOrder = () => {
545
- assert(deltaOrderSubmission.order, "No order to cancel");
546
- cancelOrderMut.mutate({
547
- orderIds: [deltaOrderSubmission.order.id]
548
- });
549
- };
533
+ const cancelDeltaOrder = cancelOrderMut.cancelDeltaOrder;
550
534
  const deltaOrderMut = useMutation({
551
535
  mutationFn: submitDeltaOrder,
552
536
  mutationKey: [DELTA_ORDER_MUTATION_KEY],
553
537
  onSuccess: (data_0) => {
554
538
  logger.log("Delta Order success", data_0);
555
539
  },
556
- onError: (error_3) => {
557
- logger.error("Delta Order error", error_3);
540
+ onError: (error_2) => {
541
+ logger.error("Delta Order error", error_2);
558
542
  },
559
543
  onSettled: () => {
560
544
  logger.log("Delta Order settled");
@@ -565,10 +549,11 @@ function useDeltaFlow({
565
549
  usingPriceRef.current = null;
566
550
  approveTxMut.reset();
567
551
  signPermitMut.reset();
568
- createOrderMut.reset();
552
+ createAndSubmitOrderMut.reset();
569
553
  deltaOrderMut.reset();
570
554
  cancelOrderMut.reset();
571
555
  resetPreSignAndSubmitDeltaOrder();
556
+ resetDepositAndSubmitDeltaOrder();
572
557
  };
573
558
  const retryFlow = (options) => {
574
559
  const lastPrice_0 = usingPriceRef.current;
@@ -592,6 +577,7 @@ function useDeltaFlow({
592
577
  approval,
593
578
  signPermit,
594
579
  deltaOrderPreSign,
580
+ deltaOrderDeposit,
595
581
  deltaOrderSubmission,
596
582
  deltaOrderExecution,
597
583
  deltaOrderCancelation,
@@ -1 +1 @@
1
- {"version":3,"file":"useDeltaFlow.js","sources":["../../../../src/hooks/swap/tradeFlow/useDeltaFlow.ts"],"sourcesContent":["import type {\n BridgePrice,\n DeltaAuction,\n DeltaOrderApiResponse,\n DeltaPrice,\n} from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport type { Address, Hash, TransactionReceipt } from \"viem\";\nimport {\n deltaOrdersQueryKey,\n type SubmittedDeltaOrderFromAPI,\n} from \"../prices/delta/queries/useDeltaOrders\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport {\n useCreateDeltaOrder,\n type CreateDeltaOrderInput,\n} from \"../prices/delta/mutations/useCreateDeltaOrder\";\nimport { useMinViemClient } from \"@/hooks/useMinViemClient\";\nimport {\n deltaAuctionPollingQueryKey,\n useEnsureDeltaOrderExecuted,\n useWatchDeltaAuction,\n type MaybeVeloraDeltaAuction,\n} from \"../prices/delta/queries/useWatchDeltaOrder\";\nimport { getOverallOrderStatus } from \"../prices/delta/orders/utils\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation, useQueryClient } 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 type { OrderSentObject } from \"@/lib/utils/toasts\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { produceDeltaOrderDeadline } from \"@/hooks/permit/utils/deadlines\";\nimport { encodePermit2TransferFromSigDataForDelta } from \"@/hooks/permit/utils/encodeArgs\";\nimport { useLogger } from \"@/core/logger\";\nimport {\n isBridgePrice,\n useDeltaPriceQuery,\n useSubscribeToDeltaPrice,\n} from \"../prices/delta/queries/useDeltaPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport {\n shouldApproveOrBatch,\n usePreSignAndSubmitDeltaOrder,\n type DeltaOrderPreSignResult,\n} from \"./common/usePreSignAndSubmitDeltaOrder\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { getSwapSideFromDeltaPrice } from \"../prices/delta/queries/utils\";\nimport { extractSelectedBridgePrice } from \"../prices/delta/bridge/utils\";\nimport type { DeltaOrBridgePrice } from \"../prices/types\";\nimport { useAtomValue } from \"@/core/store\";\nimport { bridgePreferenceAtom } from \"@/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom\";\nimport { protocolNameAtom } from \"@/components/widget/TradeParameters/state/bridgePreferences/protocolNameAtom\";\nimport {\n useCancelDeltaOrderEventCallbacks,\n useCancelDeltaOrders,\n} from \"../prices/delta/mutations/useCancelDeltaOrders\";\nimport { useChainMatches } from \"@/hooks/useChainMatches\";\nimport { useSwitchChainWithGuard } from \"@/hooks/useSwitchChainWithGuard\";\nimport {\n useExtraDeltaPriceParams,\n usePricesParams,\n} from \"../prices/usePricesParams\";\nimport { useSelectedBridgePrice } from \"../prices/delta/bridge/useSelectedBridgePrice\";\n\nconst deltaOrderFlowType = \"deltaOrder\";\n\nexport type UseDeltaFlowInput = {\n deltaPrice?: DeltaPrice | BridgePrice;\n preWrapETH?: boolean;\n};\n\nexport type SubmitDeltaOrderResult = {\n tradeFlowType: typeof deltaOrderFlowType;\n approve: SubmitTxResult;\n deltaOrder: {\n sentOrder: SubmittedDeltaOrderFromAPI;\n lastOrderState: MaybeVeloraDeltaAuction;\n };\n deltaPrice: DeltaPrice | BridgePrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype OnOrderSent = (orderSent: OrderSentObject) => void;\n\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt|Order executed}) when mined,\n// maybe??\ntype RunDeltaOrderOptions = {\n onTxSent?: OnTxSent;\n onOrderSent?: OnOrderSent;\n};\n\ntype DeltaOrderSubmissionResult = {\n order?: SubmittedDeltaOrderFromAPI;\n isCreatingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n};\n\ntype DeltaOrderExecutionResult = {\n sentOrder?: SubmittedDeltaOrderFromAPI;\n lastOrderState?: MaybeVeloraDeltaAuction;\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 DeltaOrderCancelationResult = {\n isCancelingOrder: boolean;\n isOrderCanceled: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n};\n\nexport type UseDeltaFlowResult = {\n tradeFlowType: typeof deltaOrderFlowType;\n chainId: SupportedChainId;\n runDeltaOrderFlow: (\n options?: RunDeltaOrderOptions\n ) => Promise<SubmitDeltaOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (\n options?: RunDeltaOrderOptions\n ) => Promise<SubmitDeltaOrderResult>; // reset and retry flow\n cancelDeltaOrder: () => void;\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n deltaOrderPreSign: DeltaOrderPreSignResult;\n // submission represents either normal signing and POSTing of Order or pre-signing (in a tx) and POSTing\n deltaOrderSubmission: DeltaOrderSubmissionResult;\n deltaOrderExecution: DeltaOrderExecutionResult;\n deltaOrderCancelation: DeltaOrderCancelationResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitDeltaOrderResult;\n usedPrice?: DeltaPrice | BridgePrice;\n freshPrice?: DeltaPrice | BridgePrice;\n submittedDeltaOrder?: Omit<DeltaAuction, \"signature\" | \"transactions\">;\n};\n\nconst DELTA_ORDER_MUTATION_KEY = \"runDeltaOrderFlow\";\n\nexport function useDeltaFlow({\n deltaPrice: _deltaPrice,\n preWrapETH,\n}: UseDeltaFlowInput): UseDeltaFlowResult {\n const logger = useLogger(\"DeltaFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n\n const { priceParams, chainId, destChainId } = usePricesParams(\"swap\");\n const extraDeltaPriceParams = useExtraDeltaPriceParams({\n srcToken: priceParams.srcToken,\n chainId,\n });\n const { result: deltaPriceQuery, queryKey: deltaPriceQueryKey } =\n useDeltaPriceQuery({\n priceParams: {\n ...priceParams,\n ...extraDeltaPriceParams,\n },\n chainId,\n destChainId,\n query: {\n enabled: false,\n },\n });\n const selectedBridgePrice = useSelectedBridgePrice({\n price: deltaPriceQuery.data,\n });\n const deltaPrice: DeltaOrBridgePrice | undefined =\n selectedBridgePrice || deltaPriceQuery.data || _deltaPrice;\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 swapSideFromInput = useSwapSide();\n\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: deltaPrice?.srcToken,\n srcAmount: deltaPrice?.srcAmount,\n spenderContractType: \"ParaswapDelta\",\n swapSide:\n (deltaPrice && getSwapSideFromDeltaPrice(deltaPrice)) ||\n swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4.1. Build and Submit Delta Order */\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n const queryClient = useQueryClient();\n\n const createOrderMut = useCreateDeltaOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Delta Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create Delta Order error\", error);\n },\n },\n });\n\n const deltaOrderCreateAndSubmit: UseDeltaFlowResult[\"deltaOrderSubmission\"] =\n {\n order: createOrderMut.data,\n isCreatingOrder: createOrderMut.isPending,\n isOrderSent: createOrderMut.isSuccess,\n isPending: createOrderMut.isPending,\n isError: createOrderMut.isError,\n isSuccess: createOrderMut.isSuccess,\n error: createOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Delta pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset: resetPreSignAndSubmitDeltaOrder,\n } = usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Delta Order submission for step 4 */\n const deltaOrderSubmission: UseDeltaFlowResult[\"deltaOrderSubmission\"] = {\n order: deltaOrderCreateAndSubmit.order || deltaOrderPreSign.order,\n isCreatingOrder:\n deltaOrderCreateAndSubmit.isPending || deltaOrderPreSign.isCreatingOrder,\n isOrderSent:\n deltaOrderCreateAndSubmit.isSuccess || deltaOrderPreSign.isOrderSent,\n isPending:\n deltaOrderCreateAndSubmit.isPending || deltaOrderPreSign.isPending,\n isError: deltaOrderCreateAndSubmit.isError || deltaOrderPreSign.isError,\n isSuccess:\n deltaOrderCreateAndSubmit.isSuccess || deltaOrderPreSign.isSuccess,\n error: deltaOrderCreateAndSubmit.error || deltaOrderPreSign.error,\n };\n\n /* 5. await Order execution */\n\n const watchOrderExecution = useWatchDeltaAuction({\n orderId: deltaOrderSubmission.order?.id,\n onAuctionSuccess: (order) => {\n logger.log(\"Delta Order success\", order);\n },\n onAuctionFailure: (order) => {\n logger.log(\"Delta Order failure\", order);\n },\n onUpdatedAuction: (order) => {\n logger.log(\"Delta Order updated\", order);\n },\n onTimeoutGettingOrder: (order) => {\n logger.log(\"Delta Order timeout\", order);\n },\n });\n\n const orderStatus = watchOrderExecution.data\n ? getOverallOrderStatus(watchOrderExecution.data)\n : null;\n\n // refetching stops after one minute of not finding an order (order==null)\n const neverFetchedFinishedOrder =\n watchOrderExecution.data === null && watchOrderExecution.isSuccess;\n\n const deltaOrderExecution: UseDeltaFlowResult[\"deltaOrderExecution\"] = {\n sentOrder: deltaOrderSubmission.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:\n watchOrderExecution.isError ||\n orderStatus === \"failed\" ||\n neverFetchedFinishedOrder,\n isSuccess: orderStatus === \"confirmed\",\n error: watchOrderExecution.error,\n };\n\n const cancelOrderEvents = useCancelDeltaOrderEventCallbacks(\n createOrderMut.data\n );\n\n const orderChainId = deltaOrderSubmission.order?.chainId as\n | SupportedChainId\n | undefined;\n const { forcedChainMatchesWalletChain } = useChainMatches(orderChainId);\n const { mutateAsync: switchChain } = useSwitchChainWithGuard();\n\n const cancelOrderMut = useCancelDeltaOrders({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onMutate: async (variables) => {\n assert(orderChainId, \"orderChainId is undefined\");\n if (!forcedChainMatchesWalletChain) {\n await switchChain({\n chainId: orderChainId,\n });\n }\n cancelOrderEvents.onMutate?.(variables);\n },\n onSuccess: (successResponse, vars) => {\n logger.log(\"Cancel Delta Order success\", successResponse);\n if (deltaOrderExecution.sentOrder?.id) {\n // refetch the order to get updated status\n queryClient.invalidateQueries({\n queryKey: deltaAuctionPollingQueryKey({\n orderId: deltaOrderExecution.sentOrder.id,\n }),\n });\n }\n cancelOrderEvents.onSuccess?.(successResponse, vars);\n },\n onError: (error, vars) => {\n logger.error(\"Cancel Delta Order error\", error);\n cancelOrderEvents.onError?.(error, vars);\n },\n },\n });\n\n const deltaOrderCancelation: UseDeltaFlowResult[\"deltaOrderCancelation\"] = {\n isCancelingOrder: cancelOrderMut.isPending,\n isOrderCanceled: cancelOrderMut.isSuccess && !!cancelOrderMut.data?.success,\n isPending: cancelOrderMut.isPending,\n isError: cancelOrderMut.isError,\n isSuccess: cancelOrderMut.isSuccess,\n error: cancelOrderMut.error,\n };\n\n const ensureOrderExecuted = useEnsureDeltaOrderExecuted({\n onAuctionSuccess: (order) => {\n queryClient.invalidateQueries({\n queryKey: deltaOrdersQueryKey({\n userAddress: order.user,\n }),\n exact: false,\n });\n },\n onAuctionFailure: (order) => {\n queryClient.invalidateQueries({\n queryKey: deltaOrdersQueryKey({\n userAddress: order.user,\n }),\n exact: false,\n });\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 = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n const protocolName = useAtomValue(protocolNameAtom);\n const bridgePreference = useAtomValue(bridgePreferenceAtom);\n\n const subscribeToPrice = useSubscribeToDeltaPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitDeltaOrder = async ({\n onTxSent,\n onOrderSent,\n lastPrice,\n }: RunDeltaOrderOptions & {\n lastPrice?: DeltaPrice | BridgePrice | null;\n } = {}): Promise<SubmitDeltaOrderResult> => {\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 createOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitDeltaOrder();\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(deltaPrice, \"Delta price is not available\");\n const swapSide = getSwapSideFromDeltaPrice(deltaPrice);\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n // on Delta the order.deadline must exactly match permit2.deadline\n const orderDeadline = produceDeltaOrderDeadline();\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 // deltaPrice here is the starting price, available before async code and waiting\n let freshPrice = deltaPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Delta 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 deltaPriceQuery.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 // if we have a specific bridge we need to use\n if (isBridgePrice(freshPrice)) {\n // extract the selected bridge price\n freshPrice = extractSelectedBridgePrice({\n price: freshPrice,\n protocolName,\n bridgePreference,\n });\n }\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\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 preWrapETH,\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 = deltaPriceQueryKey;\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: (price) => {\n let newPrice: DeltaOrBridgePrice = price;\n if (isBridgePrice(price)) {\n newPrice = extractSelectedBridgePrice({\n price,\n protocolName,\n bridgePreference,\n });\n }\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 // slightly higher srcAmount if BUY with slippage,\n // slightly lower destAmount if SELL with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n swapSide\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\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: 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 deltaPriceToUse = freshPrice;\n usingPriceRef.current = deltaPriceToUse;\n\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(deltaPriceToUse, \"Delta price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: deltaPriceToUse.srcAmount,\n destAmount: deltaPriceToUse.destAmount,\n },\n resolvedSlippage,\n swapSide\n );\n\n let permit = signedPermitResult?.permitEncodedArgs;\n if (\n signedPermitResult?.signedPermitData.type === \"permit2\" &&\n signedPermitResult.signedPermitData.variant === \"transferFrom\"\n ) {\n // In the Delta Contract, specifically for Permit2 transferFrom, we have signature consisting of\n // bytes32(permit2nonce) + bytes64(signature) = bytes96 Permit2 Transfer format\n permit = encodePermit2TransferFromSigDataForDelta({\n nonce: signedPermitResult.signedPermitData.nonce,\n signature: signedPermitResult.signature,\n });\n }\n\n const destChainId = isBridgePrice(deltaPriceToUse)\n ? deltaPriceToUse.bridge.destinationChainId\n : chainId;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"delta\",\n price: deltaPriceToUse,\n },\n },\n });\n\n let orderFromAPI: DeltaOrderApiResponse;\n\n const createOrderInput: CreateDeltaOrderInput = {\n signal,\n type: \"MARKET\",\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: deltaPriceToUse.srcToken,\n destToken: deltaPriceToUse.destToken,\n permit,\n destChainId,\n deltaPrice: deltaPriceToUse,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n partnerTakesSurplus,\n\n ...amountsAfterSlippage,\n deadline: Number(orderDeadline),\n side: swapSide,\n },\n };\n\n if (!shouldPreSignBatch) {\n // creating signing and POSTing the Order all together in one mutation\n orderFromAPI = await createOrderMut.mutateAsync(createOrderInput);\n } else {\n // prepare Order for pre-signing and POSTing:\n // 1. builds the order\n // 2. hashes the built order\n // 3. construct DeltaContract.setPreSignature(orderHash, true) tx calldata\n\n orderFromAPI = await preSignAndSubmitDeltaOrder({\n createDeltaOrderInput: createOrderInput,\n approval,\n preWrapETH,\n onTxSent,\n });\n }\n\n // Order is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"delta\",\n price: deltaPriceToUse,\n order: orderFromAPI,\n },\n },\n });\n\n // will refetch Order on interval until completed.\n // in parallel with useWatchDeltaAuction but independently if useWatchDeltaAuction is unmounted\n const lastOrderStatePromise = ensureOrderExecuted({\n orderId: orderFromAPI.id,\n // signal, // fails the toast if aborted, don't use\n });\n\n if (onOrderSent) {\n onOrderSent({\n order: orderFromAPI,\n lastOrderState: lastOrderStatePromise,\n });\n }\n\n const lastOrderState = await lastOrderStatePromise;\n\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"delta\",\n price: deltaPriceToUse,\n order: orderFromAPI,\n },\n },\n });\n\n // no use aborting past this point, Order is already being processed\n\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 // @TODO try catch, handle errors, refetch allowance and balance in finally\n\n return {\n tradeFlowType: deltaOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n deltaOrder: {\n sentOrder: orderFromAPI,\n lastOrderState,\n },\n deltaPrice: deltaPriceToUse,\n // @TODO add whatever else may be relevant\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 // or even a Market swap tx in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"delta\",\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 cancelDeltaOrder = () => {\n assert(deltaOrderSubmission.order, \"No order to cancel\");\n cancelOrderMut.mutate({\n orderIds: [deltaOrderSubmission.order.id],\n });\n };\n\n const deltaOrderMut = useMutation({\n mutationFn: submitDeltaOrder,\n mutationKey: [DELTA_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Delta Order success\", data);\n },\n onError: (error) => {\n logger.error(\"Delta Order error\", error);\n },\n onSettled: () => {\n logger.log(\"Delta Order settled\");\n },\n });\n\n const runDeltaOrderFlow = deltaOrderMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n createOrderMut.reset();\n deltaOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitDeltaOrder();\n };\n\n const retryFlow = (\n options?: RunDeltaOrderOptions\n ): Promise<SubmitDeltaOrderResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runDeltaOrderFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice: typeof deltaPrice = usingPriceRef.current || deltaPrice;\n\n const result = deltaOrderMut.data;\n\n /**\n * priority:\n * 1. lastOrderState = updated sent Order from final result\n * 2. sentOrder = just sent Order from final result\n * 3. deltaOrderExecution.lastOrderState = updated sent Order from watchOrderExecution (intermediate result)\n * 4. deltaOrderExecution.sentOrder = just sent Order from watchOrderExecution (intermediate result)\n */\n const submittedDeltaOrder:\n | Omit<DeltaAuction, \"signature\" | \"transactions\">\n | undefined =\n result?.deltaOrder.lastOrderState ||\n result?.deltaOrder.sentOrder ||\n deltaOrderExecution.lastOrderState ||\n deltaOrderExecution.sentOrder;\n\n /* 6. return result */\n return {\n tradeFlowType: deltaOrderFlowType,\n chainId,\n runDeltaOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelDeltaOrder,\n approval,\n signPermit,\n deltaOrderPreSign,\n deltaOrderSubmission,\n deltaOrderExecution,\n deltaOrderCancelation,\n // deltaOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: deltaOrderMut.isPending,\n isSuccess: deltaOrderSubmission.isSuccess && deltaOrderExecution.isSuccess, // approval is an optional step\n isError: deltaOrderMut.isError,\n error: deltaOrderMut.error,\n result,\n usedPrice,\n freshPrice: deltaPrice,\n submittedDeltaOrder,\n };\n}\n"],"names":["deltaOrderFlowType","DELTA_ORDER_MUTATION_KEY","useDeltaFlow","deltaPrice","_deltaPrice","preWrapETH","logger","useLogger","resolvedSlippage","useSlippage","priceParams","chainId","destChainId","usePricesParams","extraDeltaPriceParams","useExtraDeltaPriceParams","srcToken","result","deltaPriceQuery","queryKey","deltaPriceQueryKey","useDeltaPriceQuery","query","enabled","selectedBridgePrice","useSelectedBridgePrice","price","data","swapSideFromInput","useSwapSide","approval","signPermit","approveTxMut","signPermitMut","events","approveOrPermitEvents","useApproveOrPermit","srcAmount","spenderContractType","swapSide","getSwapSideFromDeltaPrice","tradeMode","address","account","useAccount","minClient","useMinViemClient","queryClient","useQueryClient","createOrderMut","useCreateDeltaOrder","client","mutationOptions","onSuccess","order","log","onError","error","deltaOrderCreateAndSubmit","isCreatingOrder","isPending","isOrderSent","isSuccess","isError","deltaOrderPreSign","canBatchTxs","isConnectedToSafe","preSignAndSubmitDeltaOrder","reset","resetPreSignAndSubmitDeltaOrder","usePreSignAndSubmitDeltaOrder","viemClient","deltaOrderSubmission","watchOrderExecution","useWatchDeltaAuction","orderId","id","onAuctionSuccess","onAuctionFailure","onUpdatedAuction","onTimeoutGettingOrder","orderStatus","getOverallOrderStatus","neverFetchedFinishedOrder","deltaOrderExecution","sentOrder","lastOrderState","isOrderPending","isOrderExecuting","isOrderExecuted","isLoading","isRefetching","cancelOrderEvents","useCancelDeltaOrderEventCallbacks","orderChainId","forcedChainMatchesWalletChain","useChainMatches","mutateAsync","switchChain","useSwitchChainWithGuard","cancelOrderMut","useCancelDeltaOrders","onMutate","variables","assert","successResponse","vars","invalidateQueries","deltaAuctionPollingQueryKey","deltaOrderCancelation","isCancelingOrder","isOrderCanceled","success","ensureOrderExecuted","useEnsureDeltaOrderExecuted","deltaOrdersQueryKey","userAddress","user","exact","ensureTxReceipt","useEnsureTxReceipt","currentAbortControllerRef","useRef","usingPriceRef","cancelFlow","current","abort","UserCancelledError","receiverAddress","useSwapReceiverAddressValue","markNonceAsUsed","clearNonce","useMarkPermit1Or2NonceAsUsed","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","usePartner","protocolName","useAtomValue","protocolNameAtom","bridgePreference","bridgePreferenceAtom","subscribeToPrice","useSubscribeToDeltaPrice","onSwap","useWidgetEvents","submitDeltaOrder","onTxSent","onOrderSent","lastPrice","abortController","AbortController","signal","orderDeadline","produceDeltaOrderDeadline","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","freshPrice","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","isBridgePrice","extractSelectedBridgePrice","unsubscribeFromPrice","shouldDoApprovalTxOrPermit","tryPermit","shouldPreSignBatch","shouldApproveOrBatch","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","applySlippage","destAmount","BigInt","onApproveTx","request","approveAsync","allowanceData","sent","txHash","approveTxReceiptPromise","hash","onReplaced","action","transactionHash","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","deadline","value","permit","permitEncodedArgs","failed","deltaPriceToUse","signedPermitData","type","variant","encodePermit2TransferFromSigDataForDelta","nonce","signature","bridge","destinationChainId","event","name","params","swapMode","orderFromAPI","createOrderInput","orderInput","owner","beneficiary","destToken","Number","side","createDeltaOrderInput","lastOrderStatePromise","tradeFlowType","approve","receipt","deltaOrder","cancelDeltaOrder","mutate","orderIds","deltaOrderMut","useMutation","mutationFn","mutationKey","onSettled","runDeltaOrderFlow","retryFlow","options","usedPrice","submittedDeltaOrder"],"mappings":"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"}
1
+ {"version":3,"file":"useDeltaFlow.js","sources":["../../../../src/hooks/swap/tradeFlow/useDeltaFlow.ts"],"sourcesContent":["import type {\n BridgePrice,\n DeltaAuction,\n DeltaOrderApiResponse,\n DeltaPrice,\n} from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport type { Address, Hash, TransactionReceipt } from \"viem\";\nimport {\n deltaOrdersQueryKey,\n type SubmittedDeltaOrderFromAPI,\n} from \"../prices/delta/queries/useDeltaOrders\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport {\n useCreateAndSubmitDeltaOrder,\n type CreateAndSubmitDeltaOrderInput,\n} from \"../prices/delta/mutations/useCreateDeltaOrder\";\nimport { useMinViemClient } from \"@/hooks/useMinViemClient\";\nimport {\n useEnsureDeltaOrderExecuted,\n useWatchDeltaAuction,\n type MaybeVeloraDeltaAuction,\n} from \"../prices/delta/queries/useWatchDeltaOrder\";\nimport { getOverallOrderStatus } from \"../prices/delta/orders/utils\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation, useQueryClient } 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 type { OrderSentObject } from \"@/lib/utils/toasts\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { produceDeltaOrderDeadline } from \"@/hooks/permit/utils/deadlines\";\nimport { encodePermit2TransferFromSigDataForDelta } from \"@/hooks/permit/utils/encodeArgs\";\nimport { useLogger } from \"@/core/logger\";\nimport {\n isBridgePrice,\n useDeltaPriceQuery,\n useSubscribeToDeltaPrice,\n} from \"../prices/delta/queries/useDeltaPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport {\n shouldApproveOrBatch,\n usePreSignAndSubmitDeltaOrder,\n type DeltaOrderPreSignResult,\n} from \"./common/usePreSignAndSubmitDeltaOrder\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { getSwapSideFromDeltaPrice } from \"../prices/delta/queries/utils\";\nimport { extractSelectedBridgePrice } from \"../prices/delta/bridge/utils\";\nimport type { DeltaOrBridgePrice } from \"../prices/types\";\nimport { useAtomValue } from \"@/core/store\";\nimport { bridgePreferenceAtom } from \"@/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom\";\nimport { protocolNameAtom } from \"@/components/widget/TradeParameters/state/bridgePreferences/protocolNameAtom\";\nimport {\n useDepositAndSubmitDeltaOrder,\n type DeltaOrderDepositResult,\n} from \"./common/useDepositAndSubmitDeltaOrder\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { useCancelOrWithdrawAndCancelDeltaOrder } from \"../prices/delta/mutations/useCancelOrWithdrawAndCancelDeltaOrder\";\nimport type { CancelDeltaOrdersReturn } from \"../prices/delta/mutations/useCancelDeltaOrders\";\n\nimport {\n useExtraDeltaPriceParams,\n usePricesParams,\n} from \"../prices/usePricesParams\";\nimport { useSelectedBridgePrice } from \"../prices/delta/bridge/useSelectedBridgePrice\";\n\nconst deltaOrderFlowType = \"deltaOrder\";\n\nexport type UseDeltaFlowInput = {\n deltaPrice?: DeltaPrice | BridgePrice;\n};\n\nexport type SubmitDeltaOrderResult = {\n tradeFlowType: typeof deltaOrderFlowType;\n approve: SubmitTxResult;\n deltaOrder: {\n sentOrder: SubmittedDeltaOrderFromAPI;\n lastOrderState: MaybeVeloraDeltaAuction;\n };\n deltaPrice: DeltaPrice | BridgePrice;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n\ntype OnOrderSent = (orderSent: OrderSentObject) => void;\n\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt|Order executed}) when mined,\n// maybe??\ntype RunDeltaOrderOptions = {\n onTxSent?: OnTxSent;\n onOrderSent?: OnOrderSent;\n};\n\ntype DeltaOrderSubmissionResult = {\n order?: SubmittedDeltaOrderFromAPI;\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 DeltaOrderExecutionResult = {\n sentOrder?: SubmittedDeltaOrderFromAPI;\n lastOrderState?: MaybeVeloraDeltaAuction;\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 DeltaOrderCancelationResult = {\n receipt?: TransactionReceipt;\n isCancelingOrder: boolean;\n isOrderCancellable: boolean;\n isOrderCanceled: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n};\n\nexport type UseDeltaFlowResult = {\n tradeFlowType: typeof deltaOrderFlowType;\n chainId: SupportedChainId;\n runDeltaOrderFlow: (\n options?: RunDeltaOrderOptions\n ) => Promise<SubmitDeltaOrderResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (\n options?: RunDeltaOrderOptions\n ) => Promise<SubmitDeltaOrderResult>; // reset and retry flow\n cancelDeltaOrder: () => Promise<TransactionReceipt | CancelDeltaOrdersReturn>;\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n deltaOrderPreSign: DeltaOrderPreSignResult;\n deltaOrderDeposit: DeltaOrderDepositResult;\n // submission represents either normal signing and POSTing of Order or pre-signing (in a tx) and POSTing\n deltaOrderSubmission: DeltaOrderSubmissionResult;\n deltaOrderExecution: DeltaOrderExecutionResult;\n deltaOrderCancelation: DeltaOrderCancelationResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitDeltaOrderResult;\n usedPrice?: DeltaPrice | BridgePrice;\n freshPrice?: DeltaPrice | BridgePrice;\n submittedDeltaOrder?: Omit<DeltaAuction, \"signature\" | \"transactions\">;\n};\n\nconst DELTA_ORDER_MUTATION_KEY = \"runDeltaOrderFlow\";\n\nexport function useDeltaFlow({\n deltaPrice: _deltaPrice,\n}: UseDeltaFlowInput): UseDeltaFlowResult {\n const logger = useLogger(\"DeltaFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n\n const { priceParams, chainId, destChainId } = usePricesParams(\"swap\");\n const extraDeltaPriceParams = useExtraDeltaPriceParams();\n const { result: deltaPriceQuery, queryKey: deltaPriceQueryKey } =\n useDeltaPriceQuery({\n priceParams: {\n ...priceParams,\n ...extraDeltaPriceParams,\n },\n chainId,\n destChainId,\n query: {\n enabled: false,\n },\n });\n const selectedBridgePrice = useSelectedBridgePrice({\n price: deltaPriceQuery.data,\n });\n const deltaPrice: DeltaOrBridgePrice | undefined =\n selectedBridgePrice || deltaPriceQuery.data || _deltaPrice;\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 swapSideFromInput = useSwapSide();\n\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: deltaPrice?.srcToken,\n srcAmount: deltaPrice?.srcAmount,\n spenderContractType: \"ParaswapDelta\",\n swapSide:\n (deltaPrice && getSwapSideFromDeltaPrice(deltaPrice)) ||\n swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4.1. Build and Submit Delta Order */\n\n const { address: account } = useAccount();\n\n const { minClient } = useMinViemClient({\n chainId,\n account,\n });\n const queryClient = useQueryClient();\n\n const createAndSubmitOrderMut = useCreateAndSubmitDeltaOrder({\n chainId,\n account,\n client: minClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Delta Order success\", order);\n },\n onError: (error) => {\n logger.error(\"Create Delta Order error\", error);\n },\n },\n });\n\n const deltaOrderCreateAndSubmit: UseDeltaFlowResult[\"deltaOrderSubmission\"] =\n {\n order: createAndSubmitOrderMut.order,\n isCreatingOrder: createAndSubmitOrderMut.isPending,\n isPostingOrder: createAndSubmitOrderMut.isPostingOrder,\n isOrderSent: createAndSubmitOrderMut.isSuccess,\n isPending: createAndSubmitOrderMut.isPending,\n isError: createAndSubmitOrderMut.isError,\n isSuccess: createAndSubmitOrderMut.isSuccess,\n error: createAndSubmitOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Delta pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset: resetPreSignAndSubmitDeltaOrder,\n } = usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n const {\n deltaOrderDeposit,\n reset: resetDepositAndSubmitDeltaOrder,\n depositAndSubmitDeltaOrder: depositAndSubmitDeltaOrder,\n } = useDepositAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Delta Order submission for step 4 */\n const deltaOrderSubmission: UseDeltaFlowResult[\"deltaOrderSubmission\"] = {\n order:\n deltaOrderCreateAndSubmit.order ||\n deltaOrderPreSign.order ||\n deltaOrderDeposit.order,\n isPostingOrder:\n deltaOrderCreateAndSubmit.isPostingOrder ||\n deltaOrderPreSign.postingOrder.isPostingOrder ||\n deltaOrderDeposit.postingOrder.isPostingOrder,\n isCreatingOrder:\n deltaOrderCreateAndSubmit.isCreatingOrder ||\n deltaOrderPreSign.isCreatingOrder ||\n deltaOrderDeposit.isCreatingOrder,\n isOrderSent:\n deltaOrderCreateAndSubmit.isOrderSent ||\n deltaOrderPreSign.isOrderSent ||\n deltaOrderDeposit.isOrderSent,\n isPending:\n deltaOrderCreateAndSubmit.isPending ||\n deltaOrderPreSign.isPending ||\n deltaOrderDeposit.isPending,\n isError:\n deltaOrderCreateAndSubmit.isError ||\n deltaOrderPreSign.isError ||\n deltaOrderDeposit.isError,\n isSuccess:\n deltaOrderCreateAndSubmit.isSuccess ||\n deltaOrderPreSign.isSuccess ||\n deltaOrderDeposit.isSuccess,\n error:\n deltaOrderCreateAndSubmit.error ||\n deltaOrderPreSign.error ||\n deltaOrderDeposit.error,\n };\n\n /* 5. await Order execution */\n\n const watchOrderExecution = useWatchDeltaAuction({\n orderId: deltaOrderSubmission.order?.id,\n onAuctionSuccess: (order) => {\n logger.log(\"Delta Order success\", order);\n },\n onAuctionFailure: (order) => {\n logger.log(\"Delta Order failure\", order);\n },\n onUpdatedAuction: (order) => {\n logger.log(\"Delta Order updated\", order);\n },\n onTimeoutGettingOrder: (order) => {\n logger.log(\"Delta Order timeout\", order);\n },\n });\n\n const orderStatus = watchOrderExecution.data\n ? getOverallOrderStatus(watchOrderExecution.data)\n : null;\n\n // refetching stops after one minute of not finding an order (order==null)\n const neverFetchedFinishedOrder =\n watchOrderExecution.data === null && watchOrderExecution.isSuccess;\n\n const deltaOrderExecution: UseDeltaFlowResult[\"deltaOrderExecution\"] = {\n sentOrder: deltaOrderSubmission.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:\n watchOrderExecution.isError ||\n orderStatus === \"failed\" ||\n neverFetchedFinishedOrder,\n isSuccess: orderStatus === \"confirmed\",\n error: watchOrderExecution.error,\n };\n\n const cancelOrderMut = useCancelOrWithdrawAndCancelDeltaOrder({\n // supply the must up-to-date order for cancellation\n order: deltaOrderExecution.lastOrderState || deltaOrderExecution.sentOrder,\n chainId,\n account,\n client: minClient,\n logger,\n });\n\n const deltaOrderCancelation: UseDeltaFlowResult[\"deltaOrderCancelation\"] = {\n receipt: cancelOrderMut.receipt,\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 };\n\n const ensureOrderExecuted = useEnsureDeltaOrderExecuted({\n onAuctionSuccess: (order) => {\n queryClient.invalidateQueries({\n queryKey: deltaOrdersQueryKey({\n userAddress: order.user,\n }),\n exact: false,\n });\n },\n onAuctionFailure: (order) => {\n queryClient.invalidateQueries({\n queryKey: deltaOrdersQueryKey({\n userAddress: order.user,\n }),\n exact: false,\n });\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 = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n const protocolName = useAtomValue(protocolNameAtom);\n const bridgePreference = useAtomValue(bridgePreferenceAtom);\n\n const subscribeToPrice = useSubscribeToDeltaPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitDeltaOrder = async ({\n onTxSent,\n onOrderSent,\n lastPrice,\n }: RunDeltaOrderOptions & {\n lastPrice?: DeltaPrice | BridgePrice | null;\n } = {}): Promise<SubmitDeltaOrderResult> => {\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 resetPreSignAndSubmitDeltaOrder();\n resetDepositAndSubmitDeltaOrder();\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(deltaPrice, \"Delta price is not available\");\n const swapSide = getSwapSideFromDeltaPrice(deltaPrice);\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n // on Delta the order.deadline must exactly match permit2.deadline\n const orderDeadline = produceDeltaOrderDeadline();\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 // deltaPrice here is the starting price, available before async code and waiting\n let freshPrice = deltaPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Delta 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 deltaPriceQuery.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 // if we have a specific bridge we need to use\n if (isBridgePrice(freshPrice)) {\n // extract the selected bridge price\n freshPrice = extractSelectedBridgePrice({\n price: freshPrice,\n protocolName,\n bridgePreference,\n });\n }\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 = deltaPriceQueryKey;\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: (price) => {\n let newPrice: DeltaOrBridgePrice = price;\n if (isBridgePrice(price)) {\n newPrice = extractSelectedBridgePrice({\n price,\n protocolName,\n bridgePreference,\n });\n }\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 // slightly higher srcAmount if BUY with slippage,\n // slightly lower destAmount if SELL with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n swapSide\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\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: 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 deltaPriceToUse = freshPrice;\n usingPriceRef.current = deltaPriceToUse;\n\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(deltaPriceToUse, \"Delta price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: deltaPriceToUse.srcAmount,\n destAmount: deltaPriceToUse.destAmount,\n },\n resolvedSlippage,\n swapSide\n );\n\n let permit = signedPermitResult?.permitEncodedArgs;\n if (\n signedPermitResult?.signedPermitData.type === \"permit2\" &&\n signedPermitResult.signedPermitData.variant === \"transferFrom\"\n ) {\n // In the Delta Contract, specifically for Permit2 transferFrom, we have signature consisting of\n // bytes32(permit2nonce) + bytes64(signature) = bytes96 Permit2 Transfer format\n permit = encodePermit2TransferFromSigDataForDelta({\n nonce: signedPermitResult.signedPermitData.nonce,\n signature: signedPermitResult.signature,\n });\n }\n\n const destChainId = isBridgePrice(deltaPriceToUse)\n ? deltaPriceToUse.bridge.destinationChainId\n : chainId;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"delta\",\n price: deltaPriceToUse,\n },\n },\n });\n\n let orderFromAPI: DeltaOrderApiResponse;\n\n const createOrderInput: CreateAndSubmitDeltaOrderInput = {\n signal,\n type: \"MARKET\",\n orderInput: {\n owner: account,\n beneficiary: receiverAddress,\n srcToken: deltaPriceToUse.srcToken,\n destToken: deltaPriceToUse.destToken,\n permit,\n destChainId,\n deltaPrice: deltaPriceToUse,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n partnerTakesSurplus,\n\n ...amountsAfterSlippage,\n deadline: Number(orderDeadline),\n side: swapSide,\n },\n };\n\n if (shouldDepositAndPreSign) {\n // deposit ETH + depositTx + POST order\n orderFromAPI = await depositAndSubmitDeltaOrder({\n createDeltaOrderInput: createOrderInput,\n depositAmount: createOrderInput.orderInput.srcAmount,\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 preSignAndSubmitDeltaOrder({\n createDeltaOrderInput: 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 onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"delta\",\n price: deltaPriceToUse,\n order: orderFromAPI,\n },\n },\n });\n\n // will refetch Order on interval until completed.\n // in parallel with useWatchDeltaAuction but independently if useWatchDeltaAuction is unmounted\n const lastOrderStatePromise = ensureOrderExecuted({\n orderId: orderFromAPI.id,\n // signal, // fails the toast if aborted, don't use\n });\n\n if (onOrderSent) {\n onOrderSent({\n order: orderFromAPI,\n lastOrderState: lastOrderStatePromise,\n });\n }\n\n const lastOrderState = await lastOrderStatePromise;\n\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"delta\",\n price: deltaPriceToUse,\n order: orderFromAPI,\n },\n },\n });\n\n // no use aborting past this point, Order is already being processed\n\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 // @TODO try catch, handle errors, refetch allowance and balance in finally\n\n return {\n tradeFlowType: deltaOrderFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n deltaOrder: {\n sentOrder: orderFromAPI,\n lastOrderState,\n },\n deltaPrice: deltaPriceToUse,\n // @TODO add whatever else may be relevant\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 // or even a Market swap tx in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"delta\",\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 cancelDeltaOrder = cancelOrderMut.cancelDeltaOrder;\n\n const deltaOrderMut = useMutation({\n mutationFn: submitDeltaOrder,\n mutationKey: [DELTA_ORDER_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Delta Order success\", data);\n },\n onError: (error) => {\n logger.error(\"Delta Order error\", error);\n },\n onSettled: () => {\n logger.log(\"Delta Order settled\");\n },\n });\n\n const runDeltaOrderFlow = deltaOrderMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n createAndSubmitOrderMut.reset();\n deltaOrderMut.reset();\n cancelOrderMut.reset();\n resetPreSignAndSubmitDeltaOrder();\n resetDepositAndSubmitDeltaOrder();\n };\n\n const retryFlow = (\n options?: RunDeltaOrderOptions\n ): Promise<SubmitDeltaOrderResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runDeltaOrderFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice: typeof deltaPrice = usingPriceRef.current || deltaPrice;\n\n const result = deltaOrderMut.data;\n\n /**\n * priority:\n * 1. lastOrderState = updated sent Order from final result\n * 2. sentOrder = just sent Order from final result\n * 3. deltaOrderExecution.lastOrderState = updated sent Order from watchOrderExecution (intermediate result)\n * 4. deltaOrderExecution.sentOrder = just sent Order from watchOrderExecution (intermediate result)\n */\n const submittedDeltaOrder:\n | Omit<DeltaAuction, \"signature\" | \"transactions\">\n | undefined =\n result?.deltaOrder.lastOrderState ||\n result?.deltaOrder.sentOrder ||\n deltaOrderExecution.lastOrderState ||\n deltaOrderExecution.sentOrder;\n\n /* 6. return result */\n return {\n tradeFlowType: deltaOrderFlowType,\n chainId,\n runDeltaOrderFlow,\n reset,\n cancelFlow,\n retryFlow,\n cancelDeltaOrder,\n approval,\n signPermit,\n deltaOrderPreSign,\n deltaOrderDeposit,\n deltaOrderSubmission,\n deltaOrderExecution,\n deltaOrderCancelation,\n // deltaOrderMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: deltaOrderMut.isPending,\n isSuccess: deltaOrderSubmission.isSuccess && deltaOrderExecution.isSuccess, // approval is an optional step\n isError: deltaOrderMut.isError,\n error: deltaOrderMut.error,\n result,\n usedPrice,\n freshPrice: deltaPrice,\n submittedDeltaOrder,\n };\n}\n"],"names":["deltaOrderFlowType","DELTA_ORDER_MUTATION_KEY","useDeltaFlow","deltaPrice","_deltaPrice","logger","useLogger","resolvedSlippage","useSlippage","priceParams","chainId","destChainId","usePricesParams","extraDeltaPriceParams","useExtraDeltaPriceParams","result","deltaPriceQuery","queryKey","deltaPriceQueryKey","useDeltaPriceQuery","query","enabled","selectedBridgePrice","useSelectedBridgePrice","price","data","swapSideFromInput","useSwapSide","approval","signPermit","approveTxMut","signPermitMut","events","approveOrPermitEvents","useApproveOrPermit","srcToken","srcAmount","spenderContractType","swapSide","getSwapSideFromDeltaPrice","tradeMode","address","account","useAccount","minClient","useMinViemClient","queryClient","useQueryClient","createAndSubmitOrderMut","useCreateAndSubmitDeltaOrder","client","mutationOptions","onSuccess","order","log","onError","error","deltaOrderCreateAndSubmit","isCreatingOrder","isPending","isPostingOrder","isOrderSent","isSuccess","isError","deltaOrderPreSign","canBatchTxs","isConnectedToSafe","preSignAndSubmitDeltaOrder","reset","resetPreSignAndSubmitDeltaOrder","usePreSignAndSubmitDeltaOrder","viemClient","deltaOrderDeposit","resetDepositAndSubmitDeltaOrder","depositAndSubmitDeltaOrder","useDepositAndSubmitDeltaOrder","deltaOrderSubmission","postingOrder","watchOrderExecution","useWatchDeltaAuction","orderId","id","onAuctionSuccess","onAuctionFailure","onUpdatedAuction","onTimeoutGettingOrder","orderStatus","getOverallOrderStatus","neverFetchedFinishedOrder","deltaOrderExecution","sentOrder","lastOrderState","isOrderPending","isOrderExecuting","isOrderExecuted","isLoading","isRefetching","cancelOrderMut","useCancelOrWithdrawAndCancelDeltaOrder","deltaOrderCancelation","receipt","isCancelingOrder","isOrderCancellable","isOrderCanceled","ensureOrderExecuted","useEnsureDeltaOrderExecuted","invalidateQueries","deltaOrdersQueryKey","userAddress","user","exact","ensureTxReceipt","useEnsureTxReceipt","currentAbortControllerRef","useRef","usingPriceRef","cancelFlow","current","abort","UserCancelledError","receiverAddress","useSwapReceiverAddressValue","markNonceAsUsed","clearNonce","useMarkPermit1Or2NonceAsUsed","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","usePartner","protocolName","useAtomValue","protocolNameAtom","bridgePreference","bridgePreferenceAtom","subscribeToPrice","useSubscribeToDeltaPrice","onSwap","useWidgetEvents","submitDeltaOrder","onTxSent","onOrderSent","lastPrice","assert","abortController","AbortController","signal","orderDeadline","produceDeltaOrderDeadline","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","freshPrice","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","isBridgePrice","extractSelectedBridgePrice","unsubscribeFromPrice","shouldDepositAndPreSign","isETHaddress","shouldDoApprovalTxOrPermit","tryPermit","shouldPreSignBatch","shouldApproveOrBatch","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","applySlippage","destAmount","BigInt","onApproveTx","request","approveAsync","allowanceData","sent","txHash","approveTxReceiptPromise","hash","onReplaced","action","transactionHash","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","deadline","value","permit","permitEncodedArgs","failed","deltaPriceToUse","signedPermitData","type","variant","encodePermit2TransferFromSigDataForDelta","nonce","signature","bridge","destinationChainId","event","name","params","swapMode","orderFromAPI","createOrderInput","orderInput","owner","beneficiary","destToken","Number","side","createDeltaOrderInput","depositAmount","mutateAsync","lastOrderStatePromise","tradeFlowType","approve","deltaOrder","cancelDeltaOrder","deltaOrderMut","useMutation","mutationFn","mutationKey","onSettled","runDeltaOrderFlow","retryFlow","options","usedPrice","submittedDeltaOrder"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { DeltaOrderStep, DeltaOrderStepKey } from '../../../components/widget/TradeOverview/steps';
1
+ import { DeltaOrderStep, DeltaOrderStepKey, GenericStep } from '../../../components/widget/TradeOverview/steps';
2
2
  import { SubmitDeltaOrderResult, UseDeltaFlowInput, UseDeltaFlowResult } from './useDeltaFlow';
3
3
  type UseDeltaSwapStepResult = {
4
4
  startDeltaSwap: UseDeltaFlowResult["runDeltaOrderFlow"];
@@ -10,6 +10,7 @@ type UseDeltaSwapStepResult = {
10
10
  isFlowCancellable: boolean;
11
11
  isOrderCancellable: boolean;
12
12
  step?: DeltaOrderStep;
13
+ orderCancellationStep?: GenericStep;
13
14
  isNonFlowStep: boolean;
14
15
  explorerLink?: string;
15
16
  error: Error | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useDeltaSwapStep.d.ts","sourceRoot":"","sources":["../../../../src/hooks/swap/tradeFlow/useDeltaSwapStep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EAElB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAOxB,KAAK,sBAAsB,GAAG;IAC5B,cAAc,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACxD,gBAAgB,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAEzD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC7C,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IAChE,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;CACpD,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,GACzB,sBAAsB,CAkLxB"}
1
+ {"version":3,"file":"useDeltaSwapStep.d.ts","sourceRoot":"","sources":["../../../../src/hooks/swap/tradeFlow/useDeltaSwapStep.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EAEZ,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,gBAAgB,CAAC;AAMxB,KAAK,sBAAsB,GAAG;IAC5B,cAAc,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;IACxD,gBAAgB,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAEzD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACnC,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAC7C,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,SAAS,EAAE,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC3C,mBAAmB,CAAC,EAAE,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IAChE,aAAa,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;CACpD,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,iBAAiB,GACzB,sBAAsB,CAsLxB"}