@velora-dex/widget 0.4.12-dev.3 → 0.4.12

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 (205) hide show
  1. package/dist/components/widget/BridgeList/BridgeListItem.d.ts.map +1 -1
  2. package/dist/components/widget/BridgeList/BridgeListItem.js +1 -1
  3. package/dist/components/widget/BridgeList/BridgeListItem.js.map +1 -1
  4. package/dist/components/widget/BridgeList/hooks.d.ts.map +1 -1
  5. package/dist/components/widget/BridgeList/hooks.js +3 -13
  6. package/dist/components/widget/BridgeList/hooks.js.map +1 -1
  7. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.d.ts.map +1 -1
  8. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js +3 -3
  9. package/dist/components/widget/LimitOrderItem/LimitOrderListItem.js.map +1 -1
  10. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.d.ts.map +1 -1
  11. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js +1 -1
  12. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
  13. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.d.ts.map +1 -1
  14. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js +0 -5
  15. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js.map +1 -1
  16. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.d.ts.map +1 -1
  17. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js +40 -37
  18. package/dist/components/widget/TradeOverview/DeltaOrderTradeOverview.js.map +1 -1
  19. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.d.ts.map +1 -1
  20. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js +36 -34
  21. package/dist/components/widget/TradeOverview/MarketSwapTradeOverview.js.map +1 -1
  22. package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.d.ts +6 -1
  23. package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.d.ts.map +1 -1
  24. package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.js +45 -30
  25. package/dist/components/widget/TradeOverview/utils/useSwapAmountsWithSlippage.js.map +1 -1
  26. package/dist/components/widget/TradeParameters/DegenModeConfirmation.d.ts.map +1 -1
  27. package/dist/components/widget/TradeParameters/DegenModeConfirmation.js +6 -3
  28. package/dist/components/widget/TradeParameters/DegenModeConfirmation.js.map +1 -1
  29. package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.d.ts +1 -1
  30. package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.d.ts.map +1 -1
  31. package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.js +2 -5
  32. package/dist/components/widget/TradeParameters/state/bridgePreferences/bridgePreferenceAtom.js.map +1 -1
  33. package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.d.ts +1 -1
  34. package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.d.ts.map +1 -1
  35. package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.js +2 -5
  36. package/dist/components/widget/TradeParameters/state/bridgePreferences/disabledBridgesAtom.js.map +1 -1
  37. package/dist/components/widget/TradeParameters/state/constants.d.ts +3 -0
  38. package/dist/components/widget/TradeParameters/state/constants.d.ts.map +1 -1
  39. package/dist/components/widget/TradeParameters/state/constants.js +4 -1
  40. package/dist/components/widget/TradeParameters/state/constants.js.map +1 -1
  41. package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.d.ts +1 -1
  42. package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.d.ts.map +1 -1
  43. package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js +1 -1
  44. package/dist/components/widget/TradeParameters/state/deltaParamActionsAtom.js.map +1 -1
  45. package/dist/components/widget/TradeParameters/state/deltaParamAtom.d.ts +1 -4
  46. package/dist/components/widget/TradeParameters/state/deltaParamAtom.d.ts.map +1 -1
  47. package/dist/components/widget/TradeParameters/state/deltaParamAtom.js +4 -3
  48. package/dist/components/widget/TradeParameters/state/deltaParamAtom.js.map +1 -1
  49. package/dist/components/widget/TradeParameters/state/eip1559ParamAtom.d.ts +1 -4
  50. package/dist/components/widget/TradeParameters/state/eip1559ParamAtom.d.ts.map +1 -1
  51. package/dist/components/widget/TradeParameters/state/eip1559ParamAtom.js +4 -3
  52. package/dist/components/widget/TradeParameters/state/eip1559ParamAtom.js.map +1 -1
  53. package/dist/components/widget/TradeParameters/state/gasPresetParamAtom.d.ts +2 -6
  54. package/dist/components/widget/TradeParameters/state/gasPresetParamAtom.d.ts.map +1 -1
  55. package/dist/components/widget/TradeParameters/state/gasPresetParamAtom.js +4 -3
  56. package/dist/components/widget/TradeParameters/state/gasPresetParamAtom.js.map +1 -1
  57. package/dist/components/widget/TradeParameters/state/slippageParamAtom.d.ts +3 -2
  58. package/dist/components/widget/TradeParameters/state/slippageParamAtom.d.ts.map +1 -1
  59. package/dist/components/widget/TradeParameters/state/slippageParamAtom.js +9 -3
  60. package/dist/components/widget/TradeParameters/state/slippageParamAtom.js.map +1 -1
  61. package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.d.ts +5 -0
  62. package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.d.ts.map +1 -0
  63. package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.js +32 -0
  64. package/dist/components/widget/TradeParameters/state/tradePreferencesAtom.js.map +1 -0
  65. package/dist/components/widget/TradeParameters/state/types.d.ts +11 -0
  66. package/dist/components/widget/TradeParameters/state/types.d.ts.map +1 -0
  67. package/dist/components/widget/TradeParameters/useTempTradeParameters.d.ts.map +1 -1
  68. package/dist/components/widget/TradeParameters/useTempTradeParameters.js +6 -7
  69. package/dist/components/widget/TradeParameters/useTempTradeParameters.js.map +1 -1
  70. package/dist/components/widget/Warning/Warning.d.ts +3 -2
  71. package/dist/components/widget/Warning/Warning.d.ts.map +1 -1
  72. package/dist/components/widget/Warning/Warning.js +74 -50
  73. package/dist/components/widget/Warning/Warning.js.map +1 -1
  74. package/dist/components/widget/Warning/types.d.ts +2 -1
  75. package/dist/components/widget/Warning/types.d.ts.map +1 -1
  76. package/dist/configurator/state/themeAtom.d.ts +1 -1
  77. package/dist/core/Updaters.d.ts.map +1 -1
  78. package/dist/core/Updaters.js +2 -0
  79. package/dist/core/Updaters.js.map +1 -1
  80. package/dist/core/Warnings.d.ts.map +1 -1
  81. package/dist/core/Warnings.js +174 -72
  82. package/dist/core/Warnings.js.map +1 -1
  83. package/dist/core/button/hooks/useWidgetButtonExtraProps.d.ts.map +1 -1
  84. package/dist/core/button/hooks/useWidgetButtonExtraProps.js +43 -34
  85. package/dist/core/button/hooks/useWidgetButtonExtraProps.js.map +1 -1
  86. package/dist/core/inputs/hooks/useTokenToInputProps.d.ts.map +1 -1
  87. package/dist/core/inputs/hooks/useTokenToInputProps.js +7 -11
  88. package/dist/core/inputs/hooks/useTokenToInputProps.js.map +1 -1
  89. package/dist/core/limit/state/limitInputAmountAtom.js +1 -1
  90. package/dist/core/limit/state/limitInputAmountAtom.js.map +1 -1
  91. package/dist/core/limit/useLimitPriceInputProps.d.ts.map +1 -1
  92. package/dist/core/limit/useLimitPriceInputProps.js +53 -72
  93. package/dist/core/limit/useLimitPriceInputProps.js.map +1 -1
  94. package/dist/core/swapDetails/priceImpact.d.ts +2 -3
  95. package/dist/core/swapDetails/priceImpact.d.ts.map +1 -1
  96. package/dist/core/swapDetails/priceImpact.js +4 -16
  97. package/dist/core/swapDetails/priceImpact.js.map +1 -1
  98. package/dist/core/swapDetails/useSwapDetailsListProps.js +82 -80
  99. package/dist/core/swapDetails/useSwapDetailsListProps.js.map +1 -1
  100. package/dist/hooks/permit/utils/deadlines.js +1 -1
  101. package/dist/hooks/permit/utils/deadlines.js.map +1 -1
  102. package/dist/hooks/swap/prices/constants.d.ts +1 -0
  103. package/dist/hooks/swap/prices/constants.d.ts.map +1 -1
  104. package/dist/hooks/swap/prices/constants.js +2 -1
  105. package/dist/hooks/swap/prices/constants.js.map +1 -1
  106. package/dist/hooks/swap/prices/delta/bridge/utils.js +0 -2
  107. package/dist/hooks/swap/prices/delta/bridge/utils.js.map +1 -1
  108. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.d.ts.map +1 -1
  109. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js +15 -0
  110. package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js.map +1 -1
  111. package/dist/hooks/swap/prices/delta/mutations/utils.d.ts +1 -0
  112. package/dist/hooks/swap/prices/delta/mutations/utils.d.ts.map +1 -1
  113. package/dist/hooks/swap/prices/delta/mutations/utils.js +10 -1
  114. package/dist/hooks/swap/prices/delta/mutations/utils.js.map +1 -1
  115. package/dist/hooks/swap/prices/delta/orders/types.d.ts +1 -1
  116. package/dist/hooks/swap/prices/delta/orders/types.d.ts.map +1 -1
  117. package/dist/hooks/swap/prices/delta/orders/unposted/const.d.ts +5 -0
  118. package/dist/hooks/swap/prices/delta/orders/unposted/const.d.ts.map +1 -0
  119. package/dist/hooks/swap/prices/delta/orders/unposted/const.js +8 -0
  120. package/dist/hooks/swap/prices/delta/orders/unposted/const.js.map +1 -0
  121. package/dist/hooks/swap/prices/delta/orders/unposted/effect.d.ts +2 -0
  122. package/dist/hooks/swap/prices/delta/orders/unposted/effect.d.ts.map +1 -0
  123. package/dist/hooks/swap/prices/delta/orders/unposted/effect.js +28 -0
  124. package/dist/hooks/swap/prices/delta/orders/unposted/effect.js.map +1 -0
  125. package/dist/hooks/swap/prices/delta/orders/unposted/index.d.ts +8 -0
  126. package/dist/hooks/swap/prices/delta/orders/unposted/index.d.ts.map +1 -0
  127. package/dist/hooks/swap/prices/delta/orders/unposted/index.js +34 -0
  128. package/dist/hooks/swap/prices/delta/orders/unposted/index.js.map +1 -0
  129. package/dist/hooks/swap/prices/delta/orders/unposted/storage.d.ts +8 -0
  130. package/dist/hooks/swap/prices/delta/orders/unposted/storage.d.ts.map +1 -0
  131. package/dist/hooks/swap/prices/delta/orders/unposted/storage.js +47 -0
  132. package/dist/hooks/swap/prices/delta/orders/unposted/storage.js.map +1 -0
  133. package/dist/hooks/swap/prices/delta/orders/unposted/types.d.ts +16 -0
  134. package/dist/hooks/swap/prices/delta/orders/unposted/types.d.ts.map +1 -0
  135. package/dist/hooks/swap/prices/delta/orders/unposted/utils.d.ts +3 -0
  136. package/dist/hooks/swap/prices/delta/orders/unposted/utils.d.ts.map +1 -0
  137. package/dist/hooks/swap/prices/delta/orders/unposted/utils.js +103 -0
  138. package/dist/hooks/swap/prices/delta/orders/unposted/utils.js.map +1 -0
  139. package/dist/hooks/swap/prices/delta/orders/utils.d.ts +7 -0
  140. package/dist/hooks/swap/prices/delta/orders/utils.d.ts.map +1 -1
  141. package/dist/hooks/swap/prices/delta/orders/utils.js +10 -4
  142. package/dist/hooks/swap/prices/delta/orders/utils.js.map +1 -1
  143. package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.d.ts +9 -4
  144. package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.d.ts.map +1 -1
  145. package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.js +19 -1
  146. package/dist/hooks/swap/prices/delta/queries/useDeltaOrders.js.map +1 -1
  147. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.d.ts +1 -0
  148. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.d.ts.map +1 -1
  149. package/dist/hooks/swap/prices/factory.d.ts +7 -0
  150. package/dist/hooks/swap/prices/factory.d.ts.map +1 -0
  151. package/dist/hooks/swap/prices/factory.js +35 -0
  152. package/dist/hooks/swap/prices/factory.js.map +1 -0
  153. package/dist/hooks/swap/prices/market/queries/errors.d.ts +8 -3
  154. package/dist/hooks/swap/prices/market/queries/errors.d.ts.map +1 -1
  155. package/dist/hooks/swap/prices/market/queries/errors.js +7 -3
  156. package/dist/hooks/swap/prices/market/queries/errors.js.map +1 -1
  157. package/dist/hooks/swap/prices/usePricesParams.d.ts.map +1 -1
  158. package/dist/hooks/swap/prices/usePricesParams.js +2 -1
  159. package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
  160. package/dist/hooks/swap/prices/useSwapPrices.d.ts +3 -1
  161. package/dist/hooks/swap/prices/useSwapPrices.d.ts.map +1 -1
  162. package/dist/hooks/swap/prices/useSwapPrices.js +107 -64
  163. package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
  164. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.d.ts +1 -0
  165. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.d.ts.map +1 -1
  166. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.js +49 -39
  167. package/dist/hooks/swap/tradeFlow/common/useApproveOrPermit.js.map +1 -1
  168. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.d.ts.map +1 -1
  169. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js +17 -9
  170. package/dist/hooks/swap/tradeFlow/common/useDepositAndSubmitDeltaOrder.js.map +1 -1
  171. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.d.ts.map +1 -1
  172. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js +21 -35
  173. package/dist/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.js.map +1 -1
  174. package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts.map +1 -1
  175. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js +17 -5
  176. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
  177. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js +1 -0
  178. package/dist/hooks/swap/tradeFlow/useLimitOrderFlow.js.map +1 -1
  179. package/dist/hooks/useSDK.js +2 -34
  180. package/dist/hooks/useSDK.js.map +1 -1
  181. package/dist/lib/utils/priceImpact.d.ts +5 -1
  182. package/dist/lib/utils/priceImpact.d.ts.map +1 -1
  183. package/dist/lib/utils/priceImpact.js +1 -1
  184. package/dist/lib/utils/priceImpact.js.map +1 -1
  185. package/dist/tokens/lists/lists.json.d.ts +78 -17
  186. package/dist/tokens/lists/lists.json.js +1 -337
  187. package/dist/tokens/lists/lists.json.js.map +1 -1
  188. package/dist/tokens/state/importedTokensAtom.d.ts +1 -1
  189. package/dist/transactions/state/transactionsAtom.d.ts +2 -1
  190. package/dist/transactions/state/transactionsAtom.d.ts.map +1 -1
  191. package/dist/transactions/state/transactionsAtom.js +6 -2
  192. package/dist/transactions/state/transactionsAtom.js.map +1 -1
  193. package/dist/transactions/types.d.ts +1 -0
  194. package/dist/transactions/types.d.ts.map +1 -1
  195. package/dist/transactions/utils.d.ts +2 -1
  196. package/dist/transactions/utils.d.ts.map +1 -1
  197. package/dist/transactions/utils.js +4 -1
  198. package/dist/transactions/utils.js.map +1 -1
  199. package/package.json +2 -2
  200. package/dist/components/widget/TradeParameters/state/resetParamsAtom.d.ts +0 -4
  201. package/dist/components/widget/TradeParameters/state/resetParamsAtom.d.ts.map +0 -1
  202. package/dist/components/widget/TradeParameters/state/slippageParamActionsAtom.d.ts +0 -4
  203. package/dist/components/widget/TradeParameters/state/slippageParamActionsAtom.d.ts.map +0 -1
  204. package/dist/components/widget/TradeParameters/state/slippageParamActionsAtom.js +0 -12
  205. package/dist/components/widget/TradeParameters/state/slippageParamActionsAtom.js.map +0 -1
@@ -1,4 +1,3 @@
1
- import { useFetchOnlySDK } from '../../../useSDK.js';
2
1
  import { useCreatePreSignableDeltaOrder } from '../../prices/delta/mutations/useCreatePreSignableDeltaOrder.js';
3
2
  import { useBatchWithApproveTxs } from '../../../batch/useBatchWithApproveTxs.js';
4
3
  import { useSendBatchTx } from '../../../batch/useSendBatchTx.js';
@@ -11,6 +10,7 @@ import { usePostDeltaOrder } from '../../prices/delta/mutations/usePostDeltaOrde
11
10
  import { useQueryClient } from '@tanstack/react-query';
12
11
  import { assert } from 'ts-essentials';
13
12
  import { useEnsureContractsQuery } from '../../prices/market/queries/useSpenderAndContracts.js';
13
+ import { guardUnpostedDeltaOrder } from '../../prices/delta/orders/unposted/index.js';
14
14
 
15
15
  function usePreSignAndSubmitDeltaOrder({
16
16
  chainId,
@@ -27,11 +27,6 @@ function usePreSignAndSubmitDeltaOrder({
27
27
  chainId,
28
28
  client: viemClient
29
29
  });
30
- const {
31
- sdk: fetchOnlySDK
32
- } = useFetchOnlySDK({
33
- chainId
34
- });
35
30
  const preSignPreparations = {
36
31
  isCreatingOrder: createPreSignableOrderMut.isPending,
37
32
  isOrderHashReady: createPreSignableOrderMut.isSuccess,
@@ -155,34 +150,23 @@ function usePreSignAndSubmitDeltaOrder({
155
150
  token: approval.token,
156
151
  chainId: approval.chainId
157
152
  }] : void 0;
158
- const {
159
- calls
160
- } = await addTxWithApprovals({
161
- txsParams,
162
- approveProps
163
- });
164
- signal?.throwIfAborted();
165
- let orderIsPosted = false;
166
- const sendUnsentOrderOnPageHide = () => {
167
- if (orderIsPosted) return;
168
- orderIsPosted = true;
169
- fetchOnlySDK?.postDeltaOrder(orderToPost);
170
- };
171
- window.addEventListener("pagehide", sendUnsentOrderOnPageHide, {
172
- once: true
173
- });
174
- const unsubscribeFromPageHide = () => {
175
- window.removeEventListener("pagehide", sendUnsentOrderOnPageHide);
176
- };
177
153
  try {
154
+ const {
155
+ calls
156
+ } = await addTxWithApprovals({
157
+ txsParams,
158
+ approveProps
159
+ });
160
+ signal?.throwIfAborted();
178
161
  const sendCallsResult = await batchTxMut.sendCalls({
179
162
  txsParams: calls
180
163
  });
181
- const sendCallsReceiptPromise = ensureCallsStatus({
182
- id: sendCallsResult.id
183
- }).then((status) => status.receipts?.[status.receipts.length - 1]);
184
- logger.log("~ deltaOrder ~ awaiting setPreSignature calls id :", sendCallsResult.id);
164
+ signal?.throwIfAborted();
185
165
  if (onTxSent) {
166
+ const sendCallsReceiptPromise = ensureCallsStatus({
167
+ id: sendCallsResult.id
168
+ }).then((status) => status.receipts?.[status.receipts.length - 1]);
169
+ logger.log("~ deltaOrder ~ setPreSignature calls id :", sendCallsResult.id);
186
170
  onTxSent({
187
171
  chainId,
188
172
  action: "preSignDeltaOrder",
@@ -194,16 +178,18 @@ function usePreSignAndSubmitDeltaOrder({
194
178
  }
195
179
  });
196
180
  }
197
- const res = await sendCallsReceiptPromise;
198
- logger.log("~ deltaOrder ~ setPreSignature calls result :", res);
199
- const orderFromAPI = await postOrderMut.mutateAsync(orderToPost);
200
- orderIsPosted = true;
181
+ const orderFromAPI = await guardUnpostedDeltaOrder({
182
+ order: {
183
+ ...orderToPost,
184
+ timestamp: Date.now(),
185
+ callsId: sendCallsResult.id
186
+ },
187
+ cb: () => postOrderMut.mutateAsync(orderToPost)
188
+ });
201
189
  return orderFromAPI;
202
190
  } catch (error_1) {
203
191
  logger.error("Pre-sign and submit Delta Order error", error_1);
204
192
  throw error_1;
205
- } finally {
206
- unsubscribeFromPageHide();
207
193
  }
208
194
  };
209
195
  const reset = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"usePreSignAndSubmitDeltaOrder.js","sources":["../../../../../src/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.ts"],"sourcesContent":["import { useFetchOnlySDK } from \"@/hooks/useSDK\";\nimport type { PreSignDeltaOrderToPost } from \"../../prices/delta/mutations/types\";\nimport { useCreatePreSignableDeltaOrder } from \"../../prices/delta/mutations/useCreatePreSignableDeltaOrder\";\nimport {\n useBatchWithApproveTxs,\n type TxParams,\n} from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { isAddress, type Address } from \"viem\";\nimport {\n deltaOrdersQueryKey,\n type SubmittedDeltaOrderFromAPI,\n} from \"../../prices/delta/queries/useDeltaOrders\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport type { LoggerInstance } from \"@/lib/utils/logger\";\nimport type { DeltaOrderApiResponse, MinViemClient } from \"@velora-dex/sdk\";\nimport { useConnectedSafe } from \"@/hooks/connectors/useIsConnectedSafe\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport { usePostDeltaOrder } from \"../../prices/delta/mutations/usePostDeltaOrder\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport type { CreateAndSubmitDeltaOrderInput } from \"../../prices/delta/mutations/useCreateDeltaOrder\";\nimport type { CallsSentObject } from \"@/lib/utils/transactionHandlers\";\nimport type {\n ApprovalFlowResult,\n BatchTxStepResult,\n SignPermitFlowResult,\n} from \"./types\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureContractsQuery } from \"../../prices/market/queries/useSpenderAndContracts\";\n\nexport type DeltaOrderPreSignResult = {\n canPreSignBatch: boolean;\n preSignPrep: {\n order?: PreSignDeltaOrderToPost;\n isCreatingOrder: boolean;\n isOrderHashReady: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n preSignBatch: BatchTxStepResult;\n postingOrder: {\n order?: SubmittedDeltaOrderFromAPI;\n isPostingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\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 UsePreSignAndSubmitDeltaOrderInput = {\n chainId: SupportedChainId;\n account?: Address;\n logger: LoggerInstance;\n viemClient?: MinViemClient;\n};\n\ntype UsePreSignAndSubmitDeltaOrderResult = {\n deltaOrderPreSign: DeltaOrderPreSignResult;\n canBatchTxs?: boolean;\n isConnectedToSafe: boolean;\n preSignAndSubmitDeltaOrder: PreSignAndSubmitDeltaOrderFunc;\n reset: () => void;\n};\n\nexport function usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient,\n}: UsePreSignAndSubmitDeltaOrderInput): UsePreSignAndSubmitDeltaOrderResult {\n const queryClient = useQueryClient();\n\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const isConnectedToSafe = useConnectedSafe();\n\n /* 1. submit Batch tx (Approve + Delta pre-sign) */\n\n const createPreSignableOrderMut = useCreatePreSignableDeltaOrder({\n chainId,\n client: viemClient,\n });\n\n const { sdk: fetchOnlySDK } = useFetchOnlySDK({\n chainId,\n });\n\n const preSignPreparations: DeltaOrderPreSignResult[\"preSignPrep\"] = {\n isCreatingOrder: createPreSignableOrderMut.isPending,\n isOrderHashReady: createPreSignableOrderMut.isSuccess,\n order: createPreSignableOrderMut.data?.orderToPost,\n isPending: createPreSignableOrderMut.isPending,\n isError: createPreSignableOrderMut.isError,\n isSuccess: createPreSignableOrderMut.isSuccess,\n error: createPreSignableOrderMut.error,\n };\n\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const deltaPreSignBatch: BatchTxStepResult = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n /* 3. post Pre-signed Order */\n\n const postOrderMut = usePostDeltaOrder({\n chainId,\n account,\n client: viemClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Delta Order success\", order);\n queryClient.invalidateQueries({\n queryKey: deltaOrdersQueryKey({\n userAddress: order.user,\n }),\n exact: false,\n });\n },\n onError: (error) => {\n logger.error(\"Create Delta Order error\", error);\n },\n },\n });\n\n const deltaOrderPosting: DeltaOrderPreSignResult[\"postingOrder\"] = {\n order: postOrderMut.data,\n isPostingOrder: postOrderMut.isPending,\n isOrderSent: postOrderMut.isSuccess,\n isPending: postOrderMut.isPending,\n isError: postOrderMut.isError,\n isSuccess: postOrderMut.isSuccess,\n error: postOrderMut.error,\n };\n\n const deltaOrderPreSign: DeltaOrderPreSignResult = {\n canPreSignBatch: !!canBatchTxs,\n order: postOrderMut.data,\n preSignPrep: preSignPreparations,\n preSignBatch: deltaPreSignBatch,\n postingOrder: deltaOrderPosting,\n isCreatingOrder:\n preSignPreparations.isCreatingOrder ||\n deltaPreSignBatch.isPending ||\n deltaOrderPosting.isPostingOrder,\n isOrderSent: deltaOrderPosting.isOrderSent,\n isPending:\n preSignPreparations.isPending ||\n deltaPreSignBatch.isPending ||\n deltaOrderPosting.isPending,\n isError:\n preSignPreparations.isError ||\n deltaPreSignBatch.isError ||\n deltaOrderPosting.isError,\n isSuccess: deltaOrderPosting.isSuccess,\n error:\n preSignPreparations.error ||\n deltaPreSignBatch.error ||\n deltaOrderPosting.error,\n };\n\n const ensureCallsStatus = useEnsureCallsStatus();\n const { ensureContractsLoaded } = useEnsureContractsQuery({ chainId });\n\n const preSignAndSubmitDeltaOrder: PreSignAndSubmitDeltaOrderFunc = async ({\n createDeltaOrderInput,\n approval,\n onTxSent,\n }) => {\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 const { signal } = createDeltaOrderInput;\n\n const { orderToPost, preSignCalldata } =\n await createPreSignableOrderMut.mutateAsync(createDeltaOrderInput);\n\n // if aborted by this point, throw an error\n signal?.throwIfAborted();\n\n const { ParaswapDelta: DeltaContract } = await ensureContractsLoaded({\n signal,\n });\n\n assert(\n DeltaContract && isAddress(DeltaContract),\n `DeltaContract is not available on chain ${chainId}`\n );\n\n const txsParams: [TxParams, ...TxParams[]] = [\n {\n to: DeltaContract,\n account,\n data: preSignCalldata,\n value: 0n,\n chainId,\n },\n ];\n\n const needToApprove =\n approval.allowanceToSet &&\n approval.allowanceToSet > 0n &&\n approval.spender;\n\n const approveProps = needToApprove\n ? [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ]\n : undefined;\n\n // 4. construct a sendCalls batch with Approve Token + setPreSignature call\n const { calls } = await addTxWithApprovals({\n txsParams,\n approveProps,\n });\n\n // if aborted by this point, throw an error\n signal?.throwIfAborted();\n\n let orderIsPosted = false;\n\n const sendUnsentOrderOnPageHide = () => {\n if (orderIsPosted) return;\n orderIsPosted = true;\n fetchOnlySDK?.postDeltaOrder(orderToPost);\n };\n\n // check if the page was closed after sendCalls succeeded but before the Order was posted.\n // in that case POST the Order just in case the page is never reloaded or localStorage survives until then.\n // `pagehide` event is more reliable on desktop and does not fire on tab switching in browser,\n // but on mobile minimizing the browser doesn't fire `pagehide` event but does `visibilitychange`.\n // with `visibilitychange` though we can't reliably resume the flow because navigator.sendBeacon doesn't return response\n window.addEventListener(\"pagehide\", sendUnsentOrderOnPageHide, {\n once: true,\n });\n // prepared to POST Order in case of page close before sending the Approve+setPreSignature batch tx request,\n // because inside Safe it's very easy to switch page and go to Transactions page by clicking in a popup,\n // so the Widget state will be lost but the Safe would already receive a tx to sign\n // and it's not obvious that the Delta flow was aborted\n const unsubscribeFromPageHide = () => {\n window.removeEventListener(\"pagehide\", sendUnsentOrderOnPageHide);\n };\n\n try {\n // 5. send the Approve+setPreSignature batch tx request to the wallet\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: sendCallsResult.id,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\n \"~ deltaOrder ~ awaiting setPreSignature calls id :\",\n sendCallsResult.id\n );\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"preSignDeltaOrder\",\n callsId: sendCallsResult.id,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"preSignDeltaOrder\",\n order: orderToPost,\n },\n });\n }\n\n // 6. wait for that batch tx to be mined;\n const res = await sendCallsReceiptPromise;\n logger.log(\"~ deltaOrder ~ setPreSignature calls result :\", res);\n\n // 7. POST the Order to API with signature=0x\n const orderFromAPI = await postOrderMut.mutateAsync(orderToPost);\n orderIsPosted = true;\n\n return orderFromAPI;\n } catch (error) {\n logger.error(\"Pre-sign and submit Delta Order error\", error);\n throw error;\n } finally {\n unsubscribeFromPageHide();\n }\n };\n\n const reset = () => {\n createPreSignableOrderMut.reset();\n batchTxMut.reset();\n postOrderMut.reset();\n };\n\n return {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset,\n };\n}\n\ntype PreSignAndSubmitDeltaOrderInput = {\n createDeltaOrderInput: CreateAndSubmitDeltaOrderInput;\n approval: Pick<\n ApprovalFlowResult,\n \"spender\" | \"allowanceToSet\" | \"token\" | \"chainId\"\n >;\n onTxSent?: (txSent: CallsSentObject) => void;\n};\n\ntype PreSignAndSubmitDeltaOrderFunc = (\n input: PreSignAndSubmitDeltaOrderInput\n) => Promise<DeltaOrderApiResponse>;\n\ntype ShouldApproveOrBatchInput = {\n approval: Pick<ApprovalFlowResult, \"needsApproval\" | \"allowanceToSet\">;\n signPermit: Pick<\n SignPermitFlowResult,\n \"isPermitSupported\" | \"isPermitReadyToSign\"\n >;\n canBatchTxs?: boolean;\n isConnectedToSafe: boolean;\n};\n\ntype ShouldApproveOrBatchResult = {\n shouldDoApprovalTxOrPermit: boolean;\n tryPermit: boolean;\n shouldPreSignBatch: boolean;\n};\n\nexport function shouldApproveOrBatch({\n approval,\n signPermit,\n canBatchTxs,\n isConnectedToSafe,\n}: ShouldApproveOrBatchInput): ShouldApproveOrBatchResult {\n // can sign a Permit\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n\n const allowanceToSet = approval.allowanceToSet ?? 0n;\n // need to Approve Token or sign Permit for it\n const tokenNeedsApproval = approval.needsApproval && allowanceToSet > 0n;\n\n let numberOfActions = 1; // Delta Order creation\n let numberOfTxs = 0;\n\n if (tokenNeedsApproval) {\n // needs to approve a token\n numberOfActions++;\n if (!tryPermit) {\n // can't sign a Permit\n numberOfTxs++;\n }\n }\n\n /*\n if connected to Safe, or needs to approve a token with a tx\n and can batch txs, then pre-sign the batch;\n that way Safe does only one action (Approve+setPreSignature batch tx)\n and a wallet that would otherwise potentially 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 let shouldPreSignBatch = false;\n // wallet can batch txs\n if (canBatchTxs) {\n // wallet is Safe and there will be multiple actions Safe needs to perform\n if (isConnectedToSafe && numberOfActions > 1) {\n // do it in one batch tx\n shouldPreSignBatch = true;\n } else if (numberOfTxs > 0 && numberOfActions > 1) {\n // if at least one tx to perform, batch it with actions\n shouldPreSignBatch = true;\n }\n // else if only one action (Delta signing), then can signTypedData only\n }\n\n // will do an Approval of Token (tx or Permit)\n const shouldDoApprovalTxOrPermit = tokenNeedsApproval && !shouldPreSignBatch;\n\n return {\n shouldDoApprovalTxOrPermit,\n tryPermit,\n shouldPreSignBatch,\n };\n}\n"],"names":["usePreSignAndSubmitDeltaOrder","chainId","account","logger","viemClient","queryClient","useQueryClient","forCurrentChain","canBatchTxs","useCanBatchTxs","isConnectedToSafe","useConnectedSafe","createPreSignableOrderMut","useCreatePreSignableDeltaOrder","client","sdk","fetchOnlySDK","useFetchOnlySDK","preSignPreparations","isCreatingOrder","isPending","isOrderHashReady","isSuccess","order","data","orderToPost","isError","error","addTxWithApprovals","useBatchWithApproveTxs","batchTxMut","useSendBatchTx","onSuccess","log","onError","batchTxMined","useAwaitCalls","id","lastCallsReceipt","receipts","length","deltaPreSignBatch","callsId","txHash","transactionHash","receipt","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isLoading","isCallsMined","isCallsAwaitingError","postOrderMut","usePostDeltaOrder","mutationOptions","invalidateQueries","queryKey","deltaOrdersQueryKey","userAddress","user","exact","deltaOrderPosting","isPostingOrder","isOrderSent","deltaOrderPreSign","canPreSignBatch","preSignPrep","preSignBatch","postingOrder","ensureCallsStatus","useEnsureCallsStatus","ensureContractsLoaded","useEnsureContractsQuery","preSignAndSubmitDeltaOrder","createDeltaOrderInput","approval","onTxSent","signal","preSignCalldata","mutateAsync","throwIfAborted","ParaswapDelta","DeltaContract","assert","isAddress","txsParams","to","value","needToApprove","allowanceToSet","spender","approveProps","token","undefined","calls","orderIsPosted","sendUnsentOrderOnPageHide","postDeltaOrder","window","addEventListener","once","unsubscribeFromPageHide","removeEventListener","sendCallsResult","sendCalls","sendCallsReceiptPromise","then","status","action","receiptPromise","transactionSpecificData","res","orderFromAPI","reset","shouldApproveOrBatch","signPermit","tryPermit","isPermitSupported","isPermitReadyToSign","tokenNeedsApproval","needsApproval","numberOfActions","numberOfTxs","shouldPreSignBatch","shouldDoApprovalTxOrPermit"],"mappings":";;;;;;;;;;;;;;AA+EO,SAASA,6BAAAA,CAA8B;AAAA,EAC5CC,OAAAA;AAAAA,EACAC,OAAAA;AAAAA,EACAC,MAAAA;AAAAA,EACAC;AACkC,CAAA,EAAwC;AAC1E,EAAA,MAAMC,cAAcC,cAAAA,EAAe;AAEnC,EAAA,MAAM;AAAA,IAAEC,eAAAA,EAAiBC;AAAAA,MAAgBC,cAAAA,EAAe;AACxD,EAAA,MAAMC,oBAAoBC,gBAAAA,EAAiB;AAI3C,EAAA,MAAMC,4BAA4BC,8BAAAA,CAA+B;AAAA,IAC/DZ,OAAAA;AAAAA,IACAa,MAAAA,EAAQV;AAAAA,GACT,CAAA;AAED,EAAA,MAAM;AAAA,IAAEW,GAAAA,EAAKC;AAAAA,MAAiBC,eAAAA,CAAgB;AAAA,IAC5ChB;AAAAA,GACD,CAAA;AAED,EAAA,MAAMiB,mBAAAA,GAA8D;AAAA,IAClEC,iBAAiBP,yBAAAA,CAA0BQ,SAAAA;AAAAA,IAC3CC,kBAAkBT,yBAAAA,CAA0BU,SAAAA;AAAAA,IAC5CC,KAAAA,EAAOX,0BAA0BY,IAAAA,EAAMC,WAAAA;AAAAA,IACvCL,WAAWR,yBAAAA,CAA0BQ,SAAAA;AAAAA,IACrCM,SAASd,yBAAAA,CAA0Bc,OAAAA;AAAAA,IACnCJ,WAAWV,yBAAAA,CAA0BU,SAAAA;AAAAA,IACrCK,OAAOf,yBAAAA,CAA0Be;AAAAA,GACnC;AAEA,EAAA,MAAM;AAAA,IAAEC;AAAAA,MAAuBC,sBAAAA,EAAuB;AAEtD,EAAA,MAAMC,aAAaC,cAAAA,CAAe;AAAA,IAChCC,WAAWA,MAAM;AACf7B,MAAAA,MAAAA,CAAO8B,IAAI,kBAAkB,CAAA;AAAA,IAC/B,CAAA;AAAA,IACAC,SAAUP,CAAAA,KAAAA,KAAU;AAClBxB,MAAAA,MAAAA,CAAOwB,KAAAA,CAAM,kBAAkBA,KAAK,CAAA;AAAA,IACtC;AAAA,GACD,CAAA;AAGD,EAAA,MAAMQ,eAAeC,aAAAA,CAAc;AAAA,IACjCC,EAAAA,EAAIP,WAAWN,IAAAA,EAAMa;AAAAA,GACtB,CAAA;AAID,EAAA,MAAMC,gBAAAA,GACJH,aAAaX,IAAAA,EAAMe,QAAAA,GAAWJ,aAAaX,IAAAA,CAAKe,QAAAA,CAASC,SAAS,CAAC,CAAA;AAErE,EAAA,MAAMC,iBAAAA,GAAuC;AAAA,IAC3CjC,WAAAA;AAAAA,IACAkC,OAAAA,EAASZ,WAAWN,IAAAA,EAAMa,EAAAA;AAAAA,IAC1BM,QAAQL,gBAAAA,EAAkBM,eAAAA;AAAAA,IAC1BC,OAAAA,EAASP,gBAAAA;AAAAA;AAAAA,IAETQ,mBAAmBhB,UAAAA,CAAWV,SAAAA;AAAAA,IAC9B2B,wBAAwBjB,UAAAA,CAAWJ,OAAAA;AAAAA,IACnCsB,aAAalB,UAAAA,CAAWR,SAAAA;AAAAA;AAAAA,IAExB2B,gBAAgBd,YAAAA,CAAae,SAAAA;AAAAA,IAC7BC,cAAchB,YAAAA,CAAab,SAAAA;AAAAA,IAC3B8B,sBAAsBjB,YAAAA,CAAaT,OAAAA;AAAAA;AAAAA,IAEnCN,SAAAA,EAAWU,UAAAA,CAAWV,SAAAA,IAAae,YAAAA,CAAae,SAAAA;AAAAA,IAChD5B,WAAWa,YAAAA,CAAab,SAAAA;AAAAA,IACxBI,OAAAA,EAASI,UAAAA,CAAWJ,OAAAA,IAAWS,YAAAA,CAAaT,OAAAA;AAAAA,IAC5CC,KAAAA,EAAOG,UAAAA,CAAWH,KAAAA,IAASQ,YAAAA,CAAaR;AAAAA,GAC1C;AAIA,EAAA,MAAM0B,eAAeC,iBAAAA,CAAkB;AAAA,IACrCrD,OAAAA;AAAAA,IACAC,OAAAA;AAAAA,IACAY,MAAAA,EAAQV,UAAAA;AAAAA,IACRmD,eAAAA,EAAiB;AAAA,MACfvB,WAAYT,CAAAA,KAAAA,KAAU;AACpBpB,QAAAA,MAAAA,CAAO8B,GAAAA,CAAI,8BAA8BV,KAAK,CAAA;AAC9ClB,QAAAA,WAAAA,CAAYmD,iBAAAA,CAAkB;AAAA,UAC5BC,UAAUC,mBAAAA,CAAoB;AAAA,YAC5BC,aAAapC,KAAAA,CAAMqC;AAAAA,WACpB,CAAA;AAAA,UACDC,KAAAA,EAAO;AAAA,SACR,CAAA;AAAA,MACH,CAAA;AAAA,MACA3B,SAAUP,CAAAA,OAAAA,KAAU;AAClBxB,QAAAA,MAAAA,CAAOwB,KAAAA,CAAM,4BAA4BA,OAAK,CAAA;AAAA,MAChD;AAAA;AACF,GACD,CAAA;AAED,EAAA,MAAMmC,iBAAAA,GAA6D;AAAA,IACjEvC,OAAO8B,YAAAA,CAAa7B,IAAAA;AAAAA,IACpBuC,gBAAgBV,YAAAA,CAAajC,SAAAA;AAAAA,IAC7B4C,aAAaX,YAAAA,CAAa/B,SAAAA;AAAAA,IAC1BF,WAAWiC,YAAAA,CAAajC,SAAAA;AAAAA,IACxBM,SAAS2B,YAAAA,CAAa3B,OAAAA;AAAAA,IACtBJ,WAAW+B,YAAAA,CAAa/B,SAAAA;AAAAA,IACxBK,OAAO0B,YAAAA,CAAa1B;AAAAA,GACtB;AAEA,EAAA,MAAMsC,iBAAAA,GAA6C;AAAA,IACjDC,eAAAA,EAAiB,CAAC,CAAC1D,WAAAA;AAAAA,IACnBe,OAAO8B,YAAAA,CAAa7B,IAAAA;AAAAA,IACpB2C,WAAAA,EAAajD,mBAAAA;AAAAA,IACbkD,YAAAA,EAAc3B,iBAAAA;AAAAA,IACd4B,YAAAA,EAAcP,iBAAAA;AAAAA,IACd3C,eAAAA,EACED,mBAAAA,CAAoBC,eAAAA,IACpBsB,iBAAAA,CAAkBrB,aAClB0C,iBAAAA,CAAkBC,cAAAA;AAAAA,IACpBC,aAAaF,iBAAAA,CAAkBE,WAAAA;AAAAA,IAC/B5C,SAAAA,EACEF,mBAAAA,CAAoBE,SAAAA,IACpBqB,iBAAAA,CAAkBrB,aAClB0C,iBAAAA,CAAkB1C,SAAAA;AAAAA,IACpBM,OAAAA,EACER,mBAAAA,CAAoBQ,OAAAA,IACpBe,iBAAAA,CAAkBf,WAClBoC,iBAAAA,CAAkBpC,OAAAA;AAAAA,IACpBJ,WAAWwC,iBAAAA,CAAkBxC,SAAAA;AAAAA,IAC7BK,KAAAA,EACET,mBAAAA,CAAoBS,KAAAA,IACpBc,iBAAAA,CAAkBd,SAClBmC,iBAAAA,CAAkBnC;AAAAA,GACtB;AAEA,EAAA,MAAM2C,oBAAoBC,oBAAAA,EAAqB;AAC/C,EAAA,MAAM;AAAA,IAAEC;AAAAA,MAA0BC,uBAAAA,CAAwB;AAAA,IAAExE;AAAAA,GAAS,CAAA;AAErE,EAAA,MAAMyE,6BAA6D,OAAO;AAAA,IACxEC,qBAAAA;AAAAA,IACAC,QAAAA;AAAAA,IACAC;AAAAA,GACF,KAAM;AAMJ,IAAA,MAAM;AAAA,MAAEC;AAAAA,KAAO,GAAIH,qBAAAA;AAEnB,IAAA,MAAM;AAAA,MAAElD,WAAAA;AAAAA,MAAasD;AAAAA,KAAgB,GACnC,MAAMnE,yBAAAA,CAA0BoE,WAAAA,CAAYL,qBAAqB,CAAA;AAGnEG,IAAAA,MAAAA,EAAQG,cAAAA,EAAe;AAEvB,IAAA,MAAM;AAAA,MAAEC,aAAAA,EAAeC;AAAAA,KAAc,GAAI,MAAMX,qBAAAA,CAAsB;AAAA,MACnEM;AAAAA,KACD,CAAA;AAEDM,IAAAA,MAAAA,CACED,iBAAiBE,SAAAA,CAAUF,aAAa,CAAA,EACxC,CAAA,wCAAA,EAA2ClF,OAAO,CAAA,CACpD,CAAA;AAEA,IAAA,MAAMqF,YAAuC,CAC3C;AAAA,MACEC,EAAAA,EAAIJ,aAAAA;AAAAA,MACJjF,OAAAA;AAAAA,MACAsB,IAAAA,EAAMuD,eAAAA;AAAAA,MACNS,KAAAA,EAAO,EAAA;AAAA,MACPvF;AAAAA,KACD,CAAA;AAGH,IAAA,MAAMwF,gBACJb,QAAAA,CAASc,cAAAA,IACTd,QAAAA,CAASc,cAAAA,GAAiB,MAC1Bd,QAAAA,CAASe,OAAAA;AAEX,IAAA,MAAMC,YAAAA,GAAeH,gBACjB,CACE;AAAA,MACEE,SAASf,QAAAA,CAASe,OAAAA;AAAAA,MAClBD,gBAAgBd,QAAAA,CAASc,cAAAA;AAAAA,MACzBG,OAAOjB,QAAAA,CAASiB,KAAAA;AAAAA,MAChB5F,SAAS2E,QAAAA,CAAS3E;AAAAA,KACnB,CAAA,GAEH6F,MAAAA;AAGJ,IAAA,MAAM;AAAA,MAAEC;AAAAA,KAAM,GAAI,MAAMnE,kBAAAA,CAAmB;AAAA,MACzC0D,SAAAA;AAAAA,MACAM;AAAAA,KACD,CAAA;AAGDd,IAAAA,MAAAA,EAAQG,cAAAA,EAAe;AAEvB,IAAA,IAAIe,aAAAA,GAAgB,KAAA;AAEpB,IAAA,MAAMC,4BAA4BA,MAAM;AACtC,MAAA,IAAID,aAAAA,EAAe;AACnBA,MAAAA,aAAAA,GAAgB,IAAA;AAChBhF,MAAAA,YAAAA,EAAckF,eAAezE,WAAW,CAAA;AAAA,IAC1C,CAAA;AAOA0E,IAAAA,MAAAA,CAAOC,gBAAAA,CAAiB,YAAYH,yBAAAA,EAA2B;AAAA,MAC7DI,IAAAA,EAAM;AAAA,KACP,CAAA;AAKD,IAAA,MAAMC,0BAA0BA,MAAM;AACpCH,MAAAA,MAAAA,CAAOI,mBAAAA,CAAoB,YAAYN,yBAAyB,CAAA;AAAA,IAClE,CAAA;AAEA,IAAA,IAAI;AAEF,MAAA,MAAMO,eAAAA,GAAkB,MAAM1E,UAAAA,CAAW2E,SAAAA,CAAU;AAAA,QACjDnB,SAAAA,EAAWS;AAAAA,OACZ,CAAA;AAED,MAAA,MAAMW,0BAA0BpC,iBAAAA,CAAkB;AAAA,QAChDjC,IAAImE,eAAAA,CAAgBnE;AAAAA,OACrB,CAAA,CAAEsE,IAAAA,CAAMC,CAAAA,MAAAA,KAAWA,MAAAA,CAAOrE,WAAWqE,MAAAA,CAAOrE,QAAAA,CAASC,MAAAA,GAAS,CAAC,CAAC,CAAA;AAEjErC,MAAAA,MAAAA,CAAO8B,GAAAA,CACL,oDAAA,EACAuE,eAAAA,CAAgBnE,EAClB,CAAA;AAEA,MAAA,IAAIwC,QAAAA,EAAU;AACZA,QAAAA,QAAAA,CAAS;AAAA,UACP5E,OAAAA;AAAAA,UACA4G,MAAAA,EAAQ,mBAAA;AAAA,UACRnE,SAAS8D,eAAAA,CAAgBnE,EAAAA;AAAAA,UACzByE,cAAAA,EAAgBJ,uBAAAA;AAAAA,UAChBK,uBAAAA,EAAyB;AAAA,YACvBF,MAAAA,EAAQ,mBAAA;AAAA,YACRtF,KAAAA,EAAOE;AAAAA;AACT,SACD,CAAA;AAAA,MACH;AAGA,MAAA,MAAMuF,MAAM,MAAMN,uBAAAA;AAClBvG,MAAAA,MAAAA,CAAO8B,GAAAA,CAAI,iDAAiD+E,GAAG,CAAA;AAG/D,MAAA,MAAMC,YAAAA,GAAe,MAAM5D,YAAAA,CAAa2B,WAAAA,CAAYvD,WAAW,CAAA;AAC/DuE,MAAAA,aAAAA,GAAgB,IAAA;AAEhB,MAAA,OAAOiB,YAAAA;AAAAA,IACT,SAAStF,OAAAA,EAAO;AACdxB,MAAAA,MAAAA,CAAOwB,KAAAA,CAAM,yCAAyCA,OAAK,CAAA;AAC3D,MAAA,MAAMA,OAAAA;AAAAA,IACR,CAAA,SAAC;AACC2E,MAAAA,uBAAAA,EAAwB;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAMY,QAAQA,MAAM;AAClBtG,IAAAA,yBAAAA,CAA0BsG,KAAAA,EAAM;AAChCpF,IAAAA,UAAAA,CAAWoF,KAAAA,EAAM;AACjB7D,IAAAA,YAAAA,CAAa6D,KAAAA,EAAM;AAAA,EACrB,CAAA;AAEA,EAAA,OAAO;AAAA,IACLjD,iBAAAA;AAAAA,IACAzD,WAAAA;AAAAA,IACAE,iBAAAA;AAAAA,IACAgE,0BAAAA;AAAAA,IACAwC;AAAAA,GACF;AACF;AA+BO,SAASC,oBAAAA,CAAqB;AAAA,EACnCvC,QAAAA;AAAAA,EACAwC,UAAAA;AAAAA,EACA5G,WAAAA;AAAAA,EACAE;AACyB,CAAA,EAA+B;AAExD,EAAA,MAAM2G,SAAAA,GACJD,UAAAA,CAAWE,iBAAAA,IAAqBF,UAAAA,CAAWG,mBAAAA;AAE7C,EAAA,MAAM7B,cAAAA,GAAiBd,SAASc,cAAAA,IAAkB,EAAA;AAElD,EAAA,MAAM8B,kBAAAA,GAAqB5C,QAAAA,CAAS6C,aAAAA,IAAiB/B,cAAAA,GAAiB,EAAA;AAEtE,EAAA,IAAIgC,eAAAA,GAAkB,CAAA;AACtB,EAAA,IAAIC,WAAAA,GAAc,CAAA;AAElB,EAAA,IAAIH,kBAAAA,EAAoB;AAEtBE,IAAAA,eAAAA,EAAAA;AACA,IAAA,IAAI,CAACL,SAAAA,EAAW;AAEdM,MAAAA,WAAAA,EAAAA;AAAAA,IACF;AAAA,EACF;AASA,EAAA,IAAIC,kBAAAA,GAAqB,KAAA;AAEzB,EAAA,IAAIpH,WAAAA,EAAa;AAEf,IAAA,IAAIE,iBAAAA,IAAqBgH,kBAAkB,CAAA,EAAG;AAE5CE,MAAAA,kBAAAA,GAAqB,IAAA;AAAA,IACvB,CAAA,MAAA,IAAWD,WAAAA,GAAc,CAAA,IAAKD,eAAAA,GAAkB,CAAA,EAAG;AAEjDE,MAAAA,kBAAAA,GAAqB,IAAA;AAAA,IACvB;AAAA,EAEF;AAGA,EAAA,MAAMC,0BAAAA,GAA6BL,sBAAsB,CAACI,kBAAAA;AAE1D,EAAA,OAAO;AAAA,IACLC,0BAAAA;AAAAA,IACAR,SAAAA;AAAAA,IACAO;AAAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"usePreSignAndSubmitDeltaOrder.js","sources":["../../../../../src/hooks/swap/tradeFlow/common/usePreSignAndSubmitDeltaOrder.ts"],"sourcesContent":["import type { PreSignDeltaOrderToPost } from \"../../prices/delta/mutations/types\";\nimport { useCreatePreSignableDeltaOrder } from \"../../prices/delta/mutations/useCreatePreSignableDeltaOrder\";\nimport {\n useBatchWithApproveTxs,\n type TxParams,\n} from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { isAddress, type Address } from \"viem\";\nimport {\n deltaOrdersQueryKey,\n type SubmittedDeltaOrderFromAPI,\n} from \"../../prices/delta/queries/useDeltaOrders\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport type { LoggerInstance } from \"@/lib/utils/logger\";\nimport type { DeltaOrderApiResponse, MinViemClient } from \"@velora-dex/sdk\";\nimport { useConnectedSafe } from \"@/hooks/connectors/useIsConnectedSafe\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport { usePostDeltaOrder } from \"../../prices/delta/mutations/usePostDeltaOrder\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport type { CreateAndSubmitDeltaOrderInput } from \"../../prices/delta/mutations/useCreateDeltaOrder\";\nimport type { CallsSentObject } from \"@/lib/utils/transactionHandlers\";\nimport type {\n ApprovalFlowResult,\n BatchTxStepResult,\n SignPermitFlowResult,\n} from \"./types\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureContractsQuery } from \"../../prices/market/queries/useSpenderAndContracts\";\nimport { guardUnpostedDeltaOrder } from \"../../prices/delta/orders/unposted\";\n\nexport type DeltaOrderPreSignResult = {\n canPreSignBatch: boolean;\n preSignPrep: {\n order?: PreSignDeltaOrderToPost;\n isCreatingOrder: boolean;\n isOrderHashReady: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n preSignBatch: BatchTxStepResult;\n postingOrder: {\n order?: SubmittedDeltaOrderFromAPI;\n isPostingOrder: boolean;\n isOrderSent: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\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 UsePreSignAndSubmitDeltaOrderInput = {\n chainId: SupportedChainId;\n account?: Address;\n logger: LoggerInstance;\n viemClient?: MinViemClient;\n};\n\ntype UsePreSignAndSubmitDeltaOrderResult = {\n deltaOrderPreSign: DeltaOrderPreSignResult;\n canBatchTxs?: boolean;\n isConnectedToSafe: boolean;\n preSignAndSubmitDeltaOrder: PreSignAndSubmitDeltaOrderFunc;\n reset: () => void;\n};\n\nexport function usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient,\n}: UsePreSignAndSubmitDeltaOrderInput): UsePreSignAndSubmitDeltaOrderResult {\n const queryClient = useQueryClient();\n\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const isConnectedToSafe = useConnectedSafe();\n\n /* 1. submit Batch tx (Approve + Delta pre-sign) */\n\n const createPreSignableOrderMut = useCreatePreSignableDeltaOrder({\n chainId,\n client: viemClient,\n });\n\n const preSignPreparations: DeltaOrderPreSignResult[\"preSignPrep\"] = {\n isCreatingOrder: createPreSignableOrderMut.isPending,\n isOrderHashReady: createPreSignableOrderMut.isSuccess,\n order: createPreSignableOrderMut.data?.orderToPost,\n isPending: createPreSignableOrderMut.isPending,\n isError: createPreSignableOrderMut.isError,\n isSuccess: createPreSignableOrderMut.isSuccess,\n error: createPreSignableOrderMut.error,\n };\n\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const deltaPreSignBatch: BatchTxStepResult = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n /* 3. post Pre-signed Order */\n\n const postOrderMut = usePostDeltaOrder({\n chainId,\n account,\n client: viemClient,\n mutationOptions: {\n onSuccess: (order) => {\n logger.log(\"Create Delta Order success\", order);\n queryClient.invalidateQueries({\n queryKey: deltaOrdersQueryKey({\n userAddress: order.user,\n }),\n exact: false,\n });\n },\n onError: (error) => {\n logger.error(\"Create Delta Order error\", error);\n },\n },\n });\n\n const deltaOrderPosting: DeltaOrderPreSignResult[\"postingOrder\"] = {\n order: postOrderMut.data,\n isPostingOrder: postOrderMut.isPending,\n isOrderSent: postOrderMut.isSuccess,\n isPending: postOrderMut.isPending,\n isError: postOrderMut.isError,\n isSuccess: postOrderMut.isSuccess,\n error: postOrderMut.error,\n };\n\n const deltaOrderPreSign: DeltaOrderPreSignResult = {\n canPreSignBatch: !!canBatchTxs,\n order: postOrderMut.data,\n preSignPrep: preSignPreparations,\n preSignBatch: deltaPreSignBatch,\n postingOrder: deltaOrderPosting,\n isCreatingOrder:\n preSignPreparations.isCreatingOrder ||\n deltaPreSignBatch.isPending ||\n deltaOrderPosting.isPostingOrder,\n isOrderSent: deltaOrderPosting.isOrderSent,\n isPending:\n preSignPreparations.isPending ||\n deltaPreSignBatch.isPending ||\n deltaOrderPosting.isPending,\n isError:\n preSignPreparations.isError ||\n deltaPreSignBatch.isError ||\n deltaOrderPosting.isError,\n isSuccess: deltaOrderPosting.isSuccess,\n error:\n preSignPreparations.error ||\n deltaPreSignBatch.error ||\n deltaOrderPosting.error,\n };\n\n const ensureCallsStatus = useEnsureCallsStatus();\n const { ensureContractsLoaded } = useEnsureContractsQuery({ chainId });\n\n const preSignAndSubmitDeltaOrder: PreSignAndSubmitDeltaOrderFunc = async ({\n createDeltaOrderInput,\n approval,\n onTxSent,\n }) => {\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 const { signal } = createDeltaOrderInput;\n\n const { orderToPost, preSignCalldata } =\n await createPreSignableOrderMut.mutateAsync(createDeltaOrderInput);\n\n // if aborted by this point, throw an error\n signal?.throwIfAborted();\n\n const { ParaswapDelta: DeltaContract } = await ensureContractsLoaded({\n signal,\n });\n\n assert(\n DeltaContract && isAddress(DeltaContract),\n `DeltaContract is not available on chain ${chainId}`\n );\n\n const txsParams: [TxParams, ...TxParams[]] = [\n {\n to: DeltaContract,\n account,\n data: preSignCalldata,\n value: 0n,\n chainId,\n },\n ];\n\n const needToApprove =\n approval.allowanceToSet &&\n approval.allowanceToSet > 0n &&\n approval.spender;\n\n const approveProps = needToApprove\n ? [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ]\n : undefined;\n\n try {\n // 4. construct a sendCalls batch with Approve Token + setPreSignature call\n const { calls } = await addTxWithApprovals({\n txsParams,\n approveProps,\n });\n\n // if aborted by this point, throw an error\n signal?.throwIfAborted();\n\n // 5. send the Approve+setPreSignature batch tx request to the wallet\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n\n // if aborted by this point, throw an error\n signal?.throwIfAborted();\n\n if (onTxSent) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: sendCallsResult.id,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\n \"~ deltaOrder ~ setPreSignature calls id :\",\n sendCallsResult.id\n );\n\n onTxSent({\n chainId,\n action: \"preSignDeltaOrder\",\n callsId: sendCallsResult.id,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"preSignDeltaOrder\",\n order: orderToPost,\n },\n });\n }\n\n // 7. POST the Order to API with signature=0x\n const orderFromAPI = await guardUnpostedDeltaOrder({\n order: {\n ...orderToPost,\n timestamp: Date.now(),\n callsId: sendCallsResult.id,\n },\n cb: () => postOrderMut.mutateAsync(orderToPost),\n });\n\n return orderFromAPI;\n } catch (error) {\n logger.error(\"Pre-sign and submit Delta Order error\", error);\n throw error;\n }\n };\n\n const reset = () => {\n createPreSignableOrderMut.reset();\n batchTxMut.reset();\n postOrderMut.reset();\n };\n\n return {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset,\n };\n}\n\ntype PreSignAndSubmitDeltaOrderInput = {\n createDeltaOrderInput: CreateAndSubmitDeltaOrderInput;\n approval: Pick<\n ApprovalFlowResult,\n \"spender\" | \"allowanceToSet\" | \"token\" | \"chainId\"\n >;\n onTxSent?: (txSent: CallsSentObject) => void;\n};\n\ntype PreSignAndSubmitDeltaOrderFunc = (\n input: PreSignAndSubmitDeltaOrderInput\n) => Promise<DeltaOrderApiResponse>;\n\ntype ShouldApproveOrBatchInput = {\n approval: Pick<ApprovalFlowResult, \"needsApproval\" | \"allowanceToSet\">;\n signPermit: Pick<\n SignPermitFlowResult,\n \"isPermitSupported\" | \"isPermitReadyToSign\"\n >;\n canBatchTxs?: boolean;\n isConnectedToSafe: boolean;\n};\n\ntype ShouldApproveOrBatchResult = {\n shouldDoApprovalTxOrPermit: boolean;\n tryPermit: boolean;\n shouldPreSignBatch: boolean;\n};\n\nexport function shouldApproveOrBatch({\n approval,\n signPermit,\n canBatchTxs,\n isConnectedToSafe,\n}: ShouldApproveOrBatchInput): ShouldApproveOrBatchResult {\n // can sign a Permit\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n\n const allowanceToSet = approval.allowanceToSet ?? 0n;\n // need to Approve Token or sign Permit for it\n const tokenNeedsApproval = approval.needsApproval && allowanceToSet > 0n;\n\n let numberOfActions = 1; // Delta Order creation\n let numberOfTxs = 0;\n\n if (tokenNeedsApproval) {\n // needs to approve a token\n numberOfActions++;\n if (!tryPermit) {\n // can't sign a Permit\n numberOfTxs++;\n }\n }\n\n /*\n if connected to Safe, or needs to approve a token with a tx\n and can batch txs, then pre-sign the batch;\n that way Safe does only one action (Approve+setPreSignature batch tx)\n and a wallet that would otherwise potentially 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 let shouldPreSignBatch = false;\n // wallet can batch txs\n if (canBatchTxs) {\n // wallet is Safe and there will be multiple actions Safe needs to perform\n if (isConnectedToSafe && numberOfActions > 1) {\n // do it in one batch tx\n shouldPreSignBatch = true;\n } else if (numberOfTxs > 0 && numberOfActions > 1) {\n // if at least one tx to perform, batch it with actions\n shouldPreSignBatch = true;\n }\n // else if only one action (Delta signing), then can signTypedData only\n }\n\n // will do an Approval of Token (tx or Permit)\n const shouldDoApprovalTxOrPermit = tokenNeedsApproval && !shouldPreSignBatch;\n\n return {\n shouldDoApprovalTxOrPermit,\n tryPermit,\n shouldPreSignBatch,\n };\n}\n"],"names":["usePreSignAndSubmitDeltaOrder","chainId","account","logger","viemClient","queryClient","useQueryClient","forCurrentChain","canBatchTxs","useCanBatchTxs","isConnectedToSafe","useConnectedSafe","createPreSignableOrderMut","useCreatePreSignableDeltaOrder","client","preSignPreparations","isCreatingOrder","isPending","isOrderHashReady","isSuccess","order","data","orderToPost","isError","error","addTxWithApprovals","useBatchWithApproveTxs","batchTxMut","useSendBatchTx","onSuccess","log","onError","batchTxMined","useAwaitCalls","id","lastCallsReceipt","receipts","length","deltaPreSignBatch","callsId","txHash","transactionHash","receipt","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isLoading","isCallsMined","isCallsAwaitingError","postOrderMut","usePostDeltaOrder","mutationOptions","invalidateQueries","queryKey","deltaOrdersQueryKey","userAddress","user","exact","deltaOrderPosting","isPostingOrder","isOrderSent","deltaOrderPreSign","canPreSignBatch","preSignPrep","preSignBatch","postingOrder","ensureCallsStatus","useEnsureCallsStatus","ensureContractsLoaded","useEnsureContractsQuery","preSignAndSubmitDeltaOrder","createDeltaOrderInput","approval","onTxSent","signal","preSignCalldata","mutateAsync","throwIfAborted","ParaswapDelta","DeltaContract","assert","isAddress","txsParams","to","value","needToApprove","allowanceToSet","spender","approveProps","token","undefined","calls","sendCallsResult","sendCalls","sendCallsReceiptPromise","then","status","action","receiptPromise","transactionSpecificData","orderFromAPI","guardUnpostedDeltaOrder","timestamp","Date","now","cb","reset","shouldApproveOrBatch","signPermit","tryPermit","isPermitSupported","isPermitReadyToSign","tokenNeedsApproval","needsApproval","numberOfActions","numberOfTxs","shouldPreSignBatch","shouldDoApprovalTxOrPermit"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDeltaFlow.d.ts","sourceRoot":"","sources":["../../../../src/hooks/swap/tradeFlow/useDeltaFlow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDeltaFlow.d.ts","sourceRoot":"","sources":["../../../../src/hooks/swap/tradeFlow/useDeltaFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EAEZ,UAAU,EACX,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,OAAO,EAAQ,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAC9D,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACf,MAAM,gBAAgB,CAAC;AAMxB,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,4CAA4C,CAAC;AAMpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACb,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAgB1D,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,wCAAwC,CAAC;AAQhD,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,wCAAwC,CAAC;AAGhD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gDAAgD,CAAC;AAQ9F,QAAA,MAAM,kBAAkB,eAAe,CAAC;AAExC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,UAAU,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,OAAO,kBAAkB,CAAC;IACzC,OAAO,EAAE,cAAc,CAAC;IACxB,UAAU,EAAE;QACV,SAAS,EAAE,0BAA0B,CAAC;QACtC,cAAc,EAAE,uBAAuB,CAAC;KACzC,CAAC;IACF,UAAU,EAAE,UAAU,GAAG,WAAW,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,KAAK,IAAI,CAAC;AAEjE,KAAK,WAAW,GAAG,CAAC,SAAS,EAAE,eAAe,KAAK,IAAI,CAAC;AAMxD,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,KAAK,0BAA0B,GAAG;IAChC,KAAK,CAAC,EAAE,0BAA0B,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,KAAK,yBAAyB,GAAG;IAC/B,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,KAAK,2BAA2B,GAAG;IACjC,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,OAAO,kBAAkB,CAAC;IACzC,OAAO,EAAE,gBAAgB,CAAC;IAC1B,iBAAiB,EAAE,CACjB,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,CACT,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACrC,gBAAgB,EAAE,MAAM,OAAO,CAAC,kBAAkB,GAAG,uBAAuB,CAAC,CAAC;IAC9E,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,UAAU,EAAE,oBAAoB,CAAC;IACjC,iBAAiB,EAAE,uBAAuB,CAAC;IAC3C,iBAAiB,EAAE,uBAAuB,CAAC;IAE3C,oBAAoB,EAAE,0BAA0B,CAAC;IACjD,mBAAmB,EAAE,yBAAyB,CAAC;IAC/C,qBAAqB,EAAE,2BAA2B,CAAC;IACnD,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,SAAS,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACrC,UAAU,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IACtC,mBAAmB,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,cAAc,CAAC,CAAC;CACxE,CAAC;AAIF,wBAAgB,YAAY,CAAC,EAC3B,UAAU,EAAE,WAAW,GACxB,EAAE,iBAAiB,GAAG,kBAAkB,CAowBxC"}
@@ -67,6 +67,7 @@ function useDeltaFlow({
67
67
  });
68
68
  const deltaPrice = selectedBridgePrice || deltaPriceQuery.data || _deltaPrice;
69
69
  const swapSideFromInput = useSwapSide();
70
+ const shouldApplySlippage = !!deltaPrice && deltaPrice.srcToken.toLowerCase() !== deltaPrice.destToken.toLowerCase();
70
71
  const {
71
72
  approval,
72
73
  signPermit,
@@ -79,7 +80,8 @@ function useDeltaFlow({
79
80
  spenderContractType: "ParaswapDelta",
80
81
  swapSide: deltaPrice && getSwapSideFromDeltaPrice(deltaPrice) || swapSideFromInput,
81
82
  tradeMode: "swap",
82
- chainId
83
+ chainId,
84
+ applySlippage: shouldApplySlippage
83
85
  });
84
86
  const {
85
87
  address: account
@@ -314,10 +316,15 @@ function useDeltaFlow({
314
316
  unsubscribeFromPrice = void 0;
315
317
  return;
316
318
  }
317
- const amountsAfterSlippage = applySlippage({
319
+ const amounts = {
318
320
  srcAmount: newPrice.srcAmount,
319
321
  destAmount: newPrice.destAmount
320
- }, resolvedSlippage, swapSide);
322
+ };
323
+ const amountsAfterSlippage = shouldApplySlippage ? (
324
+ // slightly higher srcAmount if BUY with slippage,
325
+ // slightly lower destAmount if SELL with slippage
326
+ applySlippage(amounts, resolvedSlippage, swapSide)
327
+ ) : amounts;
321
328
  if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {
322
329
  logger.log("~ fresh price ~", newPrice);
323
330
  freshPrice = newPrice;
@@ -406,10 +413,15 @@ function useDeltaFlow({
406
413
  unsubscribeFromPrice?.();
407
414
  unsubscribeFromPrice = void 0;
408
415
  assert(deltaPriceToUse, "Delta price is not available");
409
- const amountsAfterSlippage_0 = applySlippage({
416
+ const amounts_0 = {
410
417
  srcAmount: deltaPriceToUse.srcAmount,
411
418
  destAmount: deltaPriceToUse.destAmount
412
- }, resolvedSlippage, swapSide);
419
+ };
420
+ const amountsAfterSlippage_0 = shouldApplySlippage ? (
421
+ // slightly higher srcAmount if BUY with slippage,
422
+ // slightly lower destAmount if SELL with slippage
423
+ applySlippage(amounts_0, resolvedSlippage, swapSide)
424
+ ) : amounts_0;
413
425
  let permit = signedPermitResult?.permitEncodedArgs;
414
426
  if (signedPermitResult?.signedPermitData.type === "permit2" && signedPermitResult.signedPermitData.variant === "transferFrom") {
415
427
  permit = encodePermit2TransferFromSigDataForDelta({
@@ -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 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.isCreatingOrder,\n isPostingOrder: createAndSubmitOrderMut.isPostingOrder,\n isOrderSent: createAndSubmitOrderMut.isOrderSent,\n isPending: createAndSubmitOrderMut.isPending,\n isError: createAndSubmitOrderMut.isError,\n isSuccess: createAndSubmitOrderMut.isSuccess,\n error: createAndSubmitOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Delta pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset: resetPreSignAndSubmitDeltaOrder,\n } = usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n const {\n deltaOrderDeposit,\n reset: resetDepositAndSubmitDeltaOrder,\n depositAndSubmitDeltaOrder: depositAndSubmitDeltaOrder,\n } = useDepositAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Delta Order submission for step 4 */\n const 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 degenMode: priceParams.degenMode,\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","isPostingOrder","isOrderSent","isPending","isError","isSuccess","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","degenMode","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
+ {"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 shouldApplySlippage =\n !!deltaPrice &&\n deltaPrice.srcToken.toLowerCase() !== deltaPrice.destToken.toLowerCase();\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 applySlippage: shouldApplySlippage,\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.isCreatingOrder,\n isPostingOrder: createAndSubmitOrderMut.isPostingOrder,\n isOrderSent: createAndSubmitOrderMut.isOrderSent,\n isPending: createAndSubmitOrderMut.isPending,\n isError: createAndSubmitOrderMut.isError,\n isSuccess: createAndSubmitOrderMut.isSuccess,\n error: createAndSubmitOrderMut.error,\n };\n\n /* 4.2.\n 1. submit Batch tx (Approve + Delta pre-sign)\n 2. await Batch tx\n 3. post Pre-signed Order\n */\n\n const {\n deltaOrderPreSign,\n canBatchTxs,\n isConnectedToSafe,\n preSignAndSubmitDeltaOrder,\n reset: resetPreSignAndSubmitDeltaOrder,\n } = usePreSignAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n const {\n deltaOrderDeposit,\n reset: resetDepositAndSubmitDeltaOrder,\n depositAndSubmitDeltaOrder: depositAndSubmitDeltaOrder,\n } = useDepositAndSubmitDeltaOrder({\n chainId,\n account,\n logger,\n viemClient: minClient,\n });\n\n /* final Delta Order submission for step 4 */\n const 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 const amounts = {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n };\n\n const amountsAfterSlippage = shouldApplySlippage\n ? // slightly higher srcAmount if BUY with slippage,\n // slightly lower destAmount if SELL with slippage\n applySlippage(amounts, resolvedSlippage, swapSide)\n : amounts;\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 amounts = {\n srcAmount: deltaPriceToUse.srcAmount,\n destAmount: deltaPriceToUse.destAmount,\n };\n\n const amountsAfterSlippage = shouldApplySlippage\n ? // slightly higher srcAmount if BUY with slippage,\n // slightly lower destAmount if SELL with slippage\n applySlippage(amounts, resolvedSlippage, swapSide)\n : amounts;\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 degenMode: priceParams.degenMode,\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","shouldApplySlippage","srcToken","toLowerCase","destToken","approval","signPermit","approveTxMut","signPermitMut","events","approveOrPermitEvents","useApproveOrPermit","srcAmount","spenderContractType","swapSide","getSwapSideFromDeltaPrice","tradeMode","applySlippage","address","account","useAccount","minClient","useMinViemClient","queryClient","useQueryClient","createAndSubmitOrderMut","useCreateAndSubmitDeltaOrder","client","mutationOptions","onSuccess","order","log","onError","error","deltaOrderCreateAndSubmit","isCreatingOrder","isPostingOrder","isOrderSent","isPending","isError","isSuccess","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","amounts","destAmount","amountsAfterSlippage","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","degenMode","orderInput","owner","beneficiary","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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"}
@@ -3,6 +3,7 @@ import { assert } from 'ts-essentials';
3
3
  import { useEnsureTxReceipt } from '../../txs/queries/useAwaitTx.js';
4
4
  import '../../../_virtual/index.js';
5
5
  import '../../useSDK.js';
6
+ import '../../../lib/queryClient.js';
6
7
  import 'clsx';
7
8
  import 'tailwind-merge';
8
9
  import { useMutation } from '@tanstack/react-query';