@velora-dex/widget 0.4.8 → 0.4.9-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/widget/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/components/widget/AppHeader/AppHeader.js +93 -66
- package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
- package/dist/components/widget/Drawer/state/useDrawerControls.d.ts +1 -0
- package/dist/components/widget/Drawer/state/useDrawerControls.d.ts.map +1 -1
- package/dist/components/widget/Drawer/state/useDrawerControls.js +5 -2
- package/dist/components/widget/Drawer/state/useDrawerControls.js.map +1 -1
- package/dist/components/widget/TradeParameters/DegenModeConfirmation.d.ts +6 -0
- package/dist/components/widget/TradeParameters/DegenModeConfirmation.d.ts.map +1 -0
- package/dist/components/widget/TradeParameters/DegenModeConfirmation.js +124 -0
- package/dist/components/widget/TradeParameters/DegenModeConfirmation.js.map +1 -0
- package/dist/components/widget/TradeParameters/DegenModeParameter.d.ts +8 -0
- package/dist/components/widget/TradeParameters/DegenModeParameter.d.ts.map +1 -0
- package/dist/components/widget/TradeParameters/DegenModeParameter.js +84 -0
- package/dist/components/widget/TradeParameters/DegenModeParameter.js.map +1 -0
- package/dist/components/widget/TradeParameters/TradeParameters.d.ts +3 -1
- package/dist/components/widget/TradeParameters/TradeParameters.d.ts.map +1 -1
- package/dist/components/widget/TradeParameters/TradeParameters.js +131 -77
- package/dist/components/widget/TradeParameters/TradeParameters.js.map +1 -1
- package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.d.ts.map +1 -1
- package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js +15 -7
- package/dist/components/widget/TradeParameters/hooks/useIsNotDefaultAnyParameter.js.map +1 -1
- package/dist/components/widget/TradeParameters/state/degenModeParamAtom.d.ts +7 -0
- package/dist/components/widget/TradeParameters/state/degenModeParamAtom.d.ts.map +1 -0
- package/dist/components/widget/TradeParameters/state/degenModeParamAtom.js +16 -0
- package/dist/components/widget/TradeParameters/state/degenModeParamAtom.js.map +1 -0
- package/dist/components/widget/TradeParameters/state/resetParamsAtom.d.ts.map +1 -1
- package/dist/components/widget/TradeParameters/useTempTradeParameters.d.ts +2 -0
- package/dist/components/widget/TradeParameters/useTempTradeParameters.d.ts.map +1 -1
- package/dist/components/widget/TradeParameters/useTempTradeParameters.js +108 -82
- package/dist/components/widget/TradeParameters/useTempTradeParameters.js.map +1 -1
- package/dist/components/widget/Warning/Warning.d.ts +4 -2
- package/dist/components/widget/Warning/Warning.d.ts.map +1 -1
- package/dist/components/widget/Warning/Warning.js +41 -31
- package/dist/components/widget/Warning/Warning.js.map +1 -1
- package/dist/configurator/components/AllowNoUsdPricesSwitcher.d.ts +3 -3
- package/dist/configurator/components/AllowNoUsdPricesSwitcher.d.ts.map +1 -1
- package/dist/core/Warnings.d.ts.map +1 -1
- package/dist/core/Warnings.js +38 -12
- package/dist/core/Warnings.js.map +1 -1
- package/dist/core/index.js +5 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/state/configActionsAtom.js +2 -2
- package/dist/core/state/configActionsAtom.js.map +1 -1
- package/dist/core/state/configAtom.d.ts +5 -5
- package/dist/core/state/configAtom.d.ts.map +1 -1
- package/dist/core/state/configAtom.js +1 -1
- package/dist/core/state/configAtom.js.map +1 -1
- package/dist/core/swapDetails/priceImpact.d.ts +1 -0
- package/dist/core/swapDetails/priceImpact.d.ts.map +1 -1
- package/dist/core/swapDetails/priceImpact.js +5 -3
- package/dist/core/swapDetails/priceImpact.js.map +1 -1
- package/dist/core/swapDetails/usePriceImpactWarning.d.ts +8 -0
- package/dist/core/swapDetails/usePriceImpactWarning.d.ts.map +1 -0
- package/dist/core/swapDetails/usePriceImpactWarning.js +90 -0
- package/dist/core/swapDetails/usePriceImpactWarning.js.map +1 -0
- package/dist/core/swapDetails/useSwapDetailsListProps.d.ts.map +1 -1
- package/dist/core/swapDetails/useSwapDetailsListProps.js +73 -62
- package/dist/core/swapDetails/useSwapDetailsListProps.js.map +1 -1
- package/dist/core/types.d.ts +2 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/events/getters/settings.d.ts.map +1 -1
- package/dist/events/getters/settings.js +3 -0
- package/dist/events/getters/settings.js.map +1 -1
- package/dist/events/types/common.d.ts +1 -0
- package/dist/events/types/common.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.d.ts +1 -0
- package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js +4 -2
- package/dist/hooks/swap/prices/delta/mutations/useCreateDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js +4 -2
- package/dist/hooks/swap/prices/delta/mutations/useCreatePreSignableDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js +4 -2
- package/dist/hooks/swap/prices/delta/mutations/useDeltaOrderToPost.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js +4 -2
- package/dist/hooks/swap/prices/delta/mutations/usePostDeltaOrder.js.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/utils.d.ts +2 -1
- package/dist/hooks/swap/prices/delta/mutations/utils.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/mutations/utils.js +4 -2
- package/dist/hooks/swap/prices/delta/mutations/utils.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/errors.d.ts +2 -0
- package/dist/hooks/swap/prices/delta/queries/errors.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/errors.js +11 -1
- package/dist/hooks/swap/prices/delta/queries/errors.js.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.d.ts +2 -0
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.d.ts.map +1 -1
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js +4 -2
- package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/market/queries/errors.d.ts +3 -0
- package/dist/hooks/swap/prices/market/queries/errors.d.ts.map +1 -0
- package/dist/hooks/swap/prices/market/queries/errors.js +13 -0
- package/dist/hooks/swap/prices/market/queries/errors.js.map +1 -0
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.d.ts +1 -0
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.d.ts.map +1 -1
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js +3 -2
- package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
- package/dist/hooks/swap/prices/usePricesParams.d.ts +1 -1
- package/dist/hooks/swap/prices/usePricesParams.d.ts.map +1 -1
- package/dist/hooks/swap/prices/usePricesParams.js +31 -33
- package/dist/hooks/swap/prices/usePricesParams.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts.map +1 -1
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js +1 -0
- package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.d.ts.map +1 -1
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js +1 -0
- package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
- package/dist/styles.css +21 -0
- package/package.json +2 -2
- package/dist/core/swapDetails/useIsPriceImpactUnavailable.d.ts +0 -2
- package/dist/core/swapDetails/useIsPriceImpactUnavailable.d.ts.map +0 -1
- package/dist/core/swapDetails/useIsPriceImpactUnavailable.js +0 -40
- package/dist/core/swapDetails/useIsPriceImpactUnavailable.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMarketFlow.js","sources":["../../../../src/hooks/swap/tradeFlow/useMarketFlow.ts"],"sourcesContent":["import { useAwaitTx } from \"@/hooks/txs\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { useSendMarketSwapTx } from \"../prices/market/mutations/useSendMarketSwapTx\";\nimport {\n useBuildTx,\n type BuildMarketSwapTxInput,\n} from \"../prices/market/mutations/useBuildTx\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport type { Address, Hash, Hex, TransactionReceipt } from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { UserCancelledError } from \"./common/errors\";\nimport { useSwapReceiverAddressValue } from \"@/components/widget/ReceiverAddress/state/receiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport { useConstructGasParams } from \"./common/useConstructGasParams\";\nimport {\n useMarketPriceQuery,\n useSubscribeToMarketPrice,\n} from \"../prices/market/queries/useMarketPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\n\nconst marketSwapFlowType = \"marketSwap\";\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { type CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport type { BatchTxStepResult } from \"./common/types\";\nimport { usePricesParams } from \"../prices/usePricesParams\";\n\nexport type UseMarketFlowInput = {\n marketPrice?: OptimalRate;\n};\n\nexport type MarketSwapRequest = BuildMarketSwapTxInput & {\n // narrow down BuildMarketSwapTxInput from \"any two present\" {srcAmount?, destAmount?, slippage?}\n // to \"amounts always present\" variant\n swapTxInput: { srcAmount: string; destAmount: string };\n};\n\nexport type SubmitSwapResult = {\n tradeFlowType: typeof marketSwapFlowType;\n approve: SubmitTxResult;\n swap: SubmitTxResult & { swapRequest?: MarketSwapRequest };\n marketPrice: OptimalRate;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt}) when mined,\n// maybe??\ntype RunMarketOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseMarketFlowResult = {\n tradeFlowType: typeof marketSwapFlowType;\n chainId: SupportedChainId;\n runMarketSwapFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n buildTxParams: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swap: {\n txHash?: Hash;\n receipt?: TransactionReceipt;\n isConfirmingTX: boolean;\n isConfirmingTxError: boolean;\n isTxSent: boolean;\n isTxPending: boolean;\n isTxMined: boolean;\n isTxAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swapBatch: BatchTxStepResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitSwapResult;\n usedPrice?: OptimalRate;\n freshPrice?: OptimalRate;\n submittedSwapRequest?: MarketSwapRequest;\n};\n\nconst MARKET_SWAP_MUTATION_KEY = \"runMarketSwapFlow\";\n\nexport function useMarketFlow({\n marketPrice: _marketPrice,\n}: UseMarketFlowInput): UseMarketFlowResult {\n const logger = useLogger(\"MarketFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n const swapSideFromInput = useSwapSide();\n\n const { priceParams, chainId } = usePricesParams(\"swap\");\n\n const { result: marketPriceQuery, queryKey: marketPriceQueryKey } =\n useMarketPriceQuery({\n priceParams,\n chainId,\n query: {\n enabled: false,\n },\n });\n\n const marketPrice = marketPriceQuery.data || _marketPrice;\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 2.2. sign Permit1 \n\n 3. await Approve tx (if not using Permit) \n */\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: marketPrice?.srcToken,\n // if we already approved some amount, save it in approval and signPermit objects\n srcAmount: marketPrice?.srcAmount,\n spenderContractType: \"AugustusSwapper\",\n // marketPrice is the preferred source of truth\n swapSide: marketPrice?.side ?? swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4. Build Swap tx */\n const buildTxMut = useBuildTx({\n chainId,\n mutationOptions: {\n onSuccess: () => {\n logger.log(\"Build tx success\");\n },\n onError: (error) => {\n logger.error(\"Build tx error\", error);\n },\n },\n });\n\n const buildTxParams: UseMarketFlowResult[\"buildTxParams\"] = {\n isPending: buildTxMut.isPending,\n isError: buildTxMut.isError,\n isSuccess: buildTxMut.isSuccess,\n error: buildTxMut.error,\n };\n\n /* 5. submit Swap tx */\n\n /* 5.1. submit standalone Swap tx */\n\n const sendSwapTxMut = useSendMarketSwapTx({\n onSuccess: () => {\n logger.log(\"Swap tx success\");\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n });\n\n /* 5.2. submit Batch tx */\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 6. await Swap tx */\n\n /* 6.1. await standalone Swap tx */\n const swapTxMined = useAwaitTx({\n hash: sendSwapTxMut.txHash,\n chainId,\n });\n\n /* 6.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const swap: UseMarketFlowResult[\"swap\"] = {\n txHash: sendSwapTxMut.txHash,\n receipt: swapTxMined.data,\n /* tx sending */\n isConfirmingTX: sendSwapTxMut.isPending,\n isConfirmingTxError: sendSwapTxMut.isError,\n isTxSent: sendSwapTxMut.isSuccess,\n /* tx awaiting */\n isTxPending: swapTxMined.isLoading,\n isTxMined: swapTxMined.isSuccess,\n isTxAwaitingError: swapTxMined.isError,\n /* combined */\n isPending: sendSwapTxMut.isPending || swapTxMined.isLoading,\n isSuccess: swapTxMined.isSuccess, // final success\n isError: sendSwapTxMut.isError || swapTxMined.isError,\n error: sendSwapTxMut.error || swapTxMined.error,\n };\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const swapBatch: UseMarketFlowResult[\"swapBatch\"] = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n const { address: account } = useAccount();\n\n const ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\n\n // allows to abort (cancel) currently running flow,\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n const usingPriceRef = useRef<OptimalRate | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { constructGasParams } = useConstructGasParams();\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n\n const subscribeToPrice = useSubscribeToMarketPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitSwapTx: (\n options?: RunMarketOptions & { lastPrice?: OptimalRate | null }\n ) => Promise<SubmitSwapResult> = async ({ onTxSent, lastPrice } = {}) => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and deltaPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(marketPrice, \"Market price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the syncronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // marketPrice here is the starting price, available before async code and waiting\n let freshPrice = marketPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Swap tx, because it failed the last time,\n // but the price hasn't updated yet, so force refetch\n const newPriceResult = await marketPriceQuery.refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const queryKey = marketPriceQueryKey;\n\n // should always be available\n if (queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey,\n onData: (newPrice) => {\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n // slightly higher amount if BUY with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n newPrice.side\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n // Token doesn't support Permit\n // make an Approval tx\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n // @TODO check if we need to see if receipt.status === \"reverted\" and throw,\n // or if waitForTransactionReceipt already throws on such receipts\n } else {\n approveOrPermitEvents.onSignPermit.request({\n allowanceToSet: allowanceToPermit,\n });\n\n // sign Permit\n signedPermitResult = await signPermitMut.signPermitAsync({\n value: allowanceToPermit,\n });\n\n approveOrPermitEvents.onSignPermit.confirmed({\n allowanceToSet: allowanceToPermit,\n permit: signedPermitResult?.permitEncodedArgs,\n });\n }\n } catch (error) {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n } else {\n approveOrPermitEvents.onSignPermit.failed({\n allowanceToSet: allowanceToPermit,\n error: error as Error,\n });\n }\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const marketPriceToUse = freshPrice;\n usingPriceRef.current = marketPriceToUse;\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(marketPriceToUse, \"Market price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: marketPriceToUse.srcAmount,\n destAmount: marketPriceToUse.destAmount,\n },\n resolvedSlippage,\n marketPriceToUse.side\n );\n\n // fresh gas params\n const gasParams = constructGasParams();\n\n const swapRequest: MarketSwapRequest = {\n swapTxInput: {\n userAddress: account,\n receiver: receiverAddress,\n srcToken: marketPriceToUse.srcToken,\n destToken: marketPriceToUse.destToken,\n srcDecimals: marketPriceToUse.srcDecimals,\n destDecimals: marketPriceToUse.destDecimals,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n takeSurplus: partnerTakesSurplus,\n\n permit: signedPermitResult?.permitEncodedArgs, // just signed Permit signature\n\n priceRoute: marketPriceToUse,\n ...amountsAfterSlippage,\n },\n\n swapTxOptions: {\n // ignoreChecks: true,\n // gas estimate will break if only swap tx is estimated, but approve tx is not considered in a batch\n ignoreGasEstimate: shouldBatchTxs,\n // for Batch-capable wallets batch Approve+Swap tx have to ignore all checks\n ignoreAllowance: shouldBatchTxs,\n // onlyParams: true,\n ...gasParams,\n },\n };\n\n const txParams = await buildTxMut.mutateAsync(swapRequest);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n let swapTxHash: Hash | undefined;\n let swapCallsId: string | undefined;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n },\n },\n });\n\n if (shouldBatchTxs) {\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: txParams.to as Address,\n account: txParams.from as Address,\n data: txParams.data as Hex,\n value: BigInt(txParams.value),\n chainId: txParams.chainId,\n },\n ],\n approveProps: [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ],\n });\n\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n swapCallsId = sendCallsResult.id;\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsId: swapCallsId,\n },\n },\n });\n } else {\n swapTxHash = await sendSwapTxMut.sendTransactionAsync(txParams);\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txHash: swapTxHash,\n },\n },\n });\n }\n\n // no use aborting past this point, tx is already sent,\n // but we may want to connect this late abortion to tx cancellation, in the future\n\n // tx is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n let swapCallsReceipt: CallsReceipt | undefined;\n let swapTxReceipt: TransactionReceipt | undefined;\n\n if (swapCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: swapCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ swapTx ~ awaiting calls id :\", swapCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n callsId: swapCallsId,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n },\n });\n }\n\n swapCallsReceipt = await sendCallsReceiptPromise;\n\n if (swapCallsReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsReceipt: swapCallsReceipt,\n callsId: swapCallsId,\n },\n },\n });\n }\n } else if (swapTxHash) {\n const swapTxReceiptPromise = ensureTxReceipt({\n hash: swapTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:swapTx\", swapTxHash, data);\n },\n });\n\n logger.log(\"~ swapTx ~ awaiting tx hash :\", swapTxHash);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n transactionHash: swapTxHash,\n receiptPromise: swapTxReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n gasCostUSD: marketPriceToUse.gasCostUSD,\n },\n });\n }\n\n swapTxReceipt = await swapTxReceiptPromise;\n\n if (swapTxReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txReceipt: swapTxReceipt,\n txHash: swapTxHash,\n },\n },\n });\n }\n }\n\n logger.log(\"~ swapTx ~ receipt:\", swapCallsReceipt || swapTxReceipt);\n // @TODO check if we need to see if receipt.status === \"reverted\" and trhow,\n // or if waitForTransactionReceipt already throws on such receipts\n\n return {\n tradeFlowType: marketSwapFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n swap: {\n swapRequest,\n callsId: swapCallsId,\n txHash: swapTxHash,\n receipt: swapTxReceipt,\n callsReceipt: swapCallsReceipt,\n },\n marketPrice: marketPriceToUse,\n // @TODO add whatever else may be relevant\n account,\n receiverAddress,\n };\n } catch (error) {\n // Market swap failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n // or even Order in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"market\",\n error: error as Error,\n },\n },\n });\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const marketSwapMut = useMutation({\n mutationFn: submitSwapTx,\n mutationKey: [MARKET_SWAP_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Swap tx success\", data);\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n onSettled: () => {\n logger.log(\"Swap tx settled\");\n },\n });\n\n const runMarketSwapFlow = marketSwapMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n marketSwapMut.reset();\n };\n\n const retryFlow = (options?: RunMarketOptions): Promise<SubmitSwapResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runMarketSwapFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice = usingPriceRef.current || marketPrice;\n\n const result = marketSwapMut.data;\n const submittedSwapRequest = result?.swap.swapRequest;\n\n /* 7. return result */\n return {\n tradeFlowType: marketSwapFlowType,\n chainId,\n runMarketSwapFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n buildTxParams,\n swap,\n swapBatch,\n // marketSwapMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: marketSwapMut.isPending,\n isSuccess: marketSwapMut.isSuccess,\n isError: marketSwapMut.isError,\n error: marketSwapMut.error,\n result: marketSwapMut.data,\n usedPrice,\n freshPrice: marketPrice,\n submittedSwapRequest,\n };\n}\n"],"names":["marketSwapFlowType","MARKET_SWAP_MUTATION_KEY","useMarketFlow","marketPrice","_marketPrice","logger","useLogger","resolvedSlippage","useSlippage","swapSideFromInput","useSwapSide","priceParams","chainId","usePricesParams","result","marketPriceQuery","queryKey","marketPriceQueryKey","useMarketPriceQuery","query","enabled","data","approval","signPermit","approveTxMut","signPermitMut","events","approveOrPermitEvents","useApproveOrPermit","srcToken","srcAmount","spenderContractType","swapSide","side","tradeMode","buildTxMut","useBuildTx","mutationOptions","onSuccess","log","onError","error","buildTxParams","isPending","isError","isSuccess","sendSwapTxMut","useSendMarketSwapTx","forCurrentChain","canBatchTxs","useCanBatchTxs","addTxWithApprovals","useBatchWithApproveTxs","batchTxMut","useSendBatchTx","swapTxMined","useAwaitTx","hash","txHash","batchTxMined","useAwaitCalls","id","swap","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isLoading","isTxMined","isTxAwaitingError","lastCallsReceipt","receipts","length","swapBatch","callsId","transactionHash","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","address","account","useAccount","ensureTxReceipt","useEnsureTxReceipt","ensureCallsStatus","useEnsureCallsStatus","currentAbortControllerRef","useRef","usingPriceRef","cancelFlow","current","abort","UserCancelledError","receiverAddress","useSwapReceiverAddressValue","markNonceAsUsed","clearNonce","useMarkPermit1Or2NonceAsUsed","constructGasParams","useConstructGasParams","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","usePartner","subscribeToPrice","useSubscribeToMarketPrice","onSwap","useWidgetEvents","submitSwapTx","onTxSent","lastPrice","reset","assert","abortController","AbortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","freshPrice","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldBatchTxs","needsApproval","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","applySlippage","destAmount","BigInt","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","onReplaced","action","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","marketPriceToUse","gasParams","swapRequest","swapTxInput","userAddress","receiver","destToken","srcDecimals","destDecimals","takeSurplus","priceRoute","swapTxOptions","ignoreGasEstimate","ignoreAllowance","txParams","mutateAsync","swapTxHash","swapCallsId","event","name","params","swapMode","price","calls","txsParams","to","from","approveProps","sendCallsResult","sendCalls","sendTransactionAsync","signedPermitData","swapCallsReceipt","swapTxReceipt","sendCallsReceiptPromise","then","status","source","srcTokenAddress","destTokenAddress","srcAmountUSD","srcUSD","destAmountUSD","destUSD","gasCost","callsReceipt","swapTxReceiptPromise","gasCostUSD","tradeFlowType","approve","marketSwapMut","useMutation","mutationFn","mutationKey","onSettled","runMarketSwapFlow","retryFlow","options","usedPrice","submittedSwapRequest"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useMarketFlow.js","sources":["../../../../src/hooks/swap/tradeFlow/useMarketFlow.ts"],"sourcesContent":["import { useAwaitTx } from \"@/hooks/txs\";\nimport type { OptimalRate } from \"@velora-dex/sdk\";\nimport { useAccount } from \"wagmi\";\nimport { useSendMarketSwapTx } from \"../prices/market/mutations/useSendMarketSwapTx\";\nimport {\n useBuildTx,\n type BuildMarketSwapTxInput,\n} from \"../prices/market/mutations/useBuildTx\";\nimport { assert } from \"ts-essentials\";\nimport { useEnsureTxReceipt } from \"@/hooks/txs/queries/useAwaitTx\";\nimport type { Address, Hash, Hex, TransactionReceipt } from \"viem\";\nimport type {\n ApprovalFlowResult,\n SignPermitFlowResult,\n SubmitTxResult,\n} from \"./common/types\";\nimport { applySlippage } from \"@/lib/utils/price\";\nimport { useSlippage } from \"@/hooks/useSlippage\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { UserCancelledError } from \"./common/errors\";\nimport { useSwapReceiverAddressValue } from \"@/components/widget/ReceiverAddress/state/receiverAddressAtom\";\nimport type {\n CallsSentObject,\n TxSentObject,\n} from \"@/lib/utils/transactionHandlers\";\nimport { useSwapSide } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { useApproveOrPermit } from \"./common/useApproveOrPermit\";\nimport {\n useMarkPermit1Or2NonceAsUsed,\n type SignedPermitResult,\n} from \"./common/useSignPermit1Or2\";\nimport { useLogger } from \"@/core/logger\";\nimport { useConstructGasParams } from \"./common/useConstructGasParams\";\nimport {\n useMarketPriceQuery,\n useSubscribeToMarketPrice,\n} from \"../prices/market/queries/useMarketPriceQuery\";\nimport { usePartner } from \"@/hooks/usePartner\";\n\nconst marketSwapFlowType = \"marketSwap\";\nimport { useSendBatchTx } from \"@/hooks/batch/useSendBatchTx\";\nimport { useCanBatchTxs } from \"@/hooks/batch/useCanBatchTxs\";\nimport {\n useAwaitCalls,\n useEnsureCallsStatus,\n} from \"@/hooks/batch/useAwaitCalls\";\nimport { type CallsReceipt } from \"@/hooks/batch/useAwaitCalls\";\nimport { useBatchWithApproveTxs } from \"@/hooks/batch/useBatchWithApproveTxs\";\nimport { useWidgetEvents } from \"@/core/state/widgetEventsAtom\";\nimport type { BatchTxStepResult } from \"./common/types\";\nimport { usePricesParams } from \"../prices/usePricesParams\";\n\nexport type UseMarketFlowInput = {\n marketPrice?: OptimalRate;\n};\n\nexport type MarketSwapRequest = BuildMarketSwapTxInput & {\n // narrow down BuildMarketSwapTxInput from \"any two present\" {srcAmount?, destAmount?, slippage?}\n // to \"amounts always present\" variant\n swapTxInput: { srcAmount: string; destAmount: string };\n};\n\nexport type SubmitSwapResult = {\n tradeFlowType: typeof marketSwapFlowType;\n approve: SubmitTxResult;\n swap: SubmitTxResult & { swapRequest?: MarketSwapRequest };\n marketPrice: OptimalRate;\n account: Address;\n receiverAddress?: Address;\n};\n\ntype OnTxSent = (txSent: TxSentObject | CallsSentObject) => void;\n// @TODO instead add global onTxSent subscription to\n// MutationCache({onSuccess: txHash}) when sent\n// and QueryCache({onSuccess: txReceipt}) when mined,\n// maybe??\ntype RunMarketOptions = {\n onTxSent?: OnTxSent;\n};\n\nexport type UseMarketFlowResult = {\n tradeFlowType: typeof marketSwapFlowType;\n chainId: SupportedChainId;\n runMarketSwapFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>;\n reset: () => void; // reset on Error to retry\n cancelFlow: () => void; // cancel flow\n retryFlow: (options?: RunMarketOptions) => Promise<SubmitSwapResult>; // reset and retry flow\n approval: ApprovalFlowResult;\n signPermit: SignPermitFlowResult;\n buildTxParams: {\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swap: {\n txHash?: Hash;\n receipt?: TransactionReceipt;\n isConfirmingTX: boolean;\n isConfirmingTxError: boolean;\n isTxSent: boolean;\n isTxPending: boolean;\n isTxMined: boolean;\n isTxAwaitingError: boolean;\n isPending: boolean;\n isError: boolean;\n isSuccess: boolean;\n error: Error | null;\n };\n swapBatch: BatchTxStepResult;\n isPending: boolean;\n isSuccess: boolean;\n isError: boolean;\n error: Error | null;\n result?: SubmitSwapResult;\n usedPrice?: OptimalRate;\n freshPrice?: OptimalRate;\n submittedSwapRequest?: MarketSwapRequest;\n};\n\nconst MARKET_SWAP_MUTATION_KEY = \"runMarketSwapFlow\";\n\nexport function useMarketFlow({\n marketPrice: _marketPrice,\n}: UseMarketFlowInput): UseMarketFlowResult {\n const logger = useLogger(\"MarketFlow\");\n const { resolvedSlippage } = useSlippage(\"swap\");\n const swapSideFromInput = useSwapSide();\n\n const { priceParams, chainId } = usePricesParams(\"swap\");\n\n const { result: marketPriceQuery, queryKey: marketPriceQueryKey } =\n useMarketPriceQuery({\n priceParams,\n chainId,\n query: {\n enabled: false,\n },\n });\n\n const marketPrice = marketPriceQuery.data || _marketPrice;\n\n /* Inside useApproveOrPermit:\n 1. Get allowance for tokenFrom \n 2.1. submit Approve tx if necessary \n\n 2.2. sign Permit1 \n\n 3. await Approve tx (if not using Permit) \n */\n const {\n approval,\n signPermit,\n approveTxMut,\n signPermitMut,\n events: approveOrPermitEvents,\n } = useApproveOrPermit({\n srcToken: marketPrice?.srcToken,\n // if we already approved some amount, save it in approval and signPermit objects\n srcAmount: marketPrice?.srcAmount,\n spenderContractType: \"AugustusSwapper\",\n // marketPrice is the preferred source of truth\n swapSide: marketPrice?.side ?? swapSideFromInput,\n tradeMode: \"swap\",\n chainId,\n });\n\n /* 4. Build Swap tx */\n const buildTxMut = useBuildTx({\n chainId,\n mutationOptions: {\n onSuccess: () => {\n logger.log(\"Build tx success\");\n },\n onError: (error) => {\n logger.error(\"Build tx error\", error);\n },\n },\n });\n\n const buildTxParams: UseMarketFlowResult[\"buildTxParams\"] = {\n isPending: buildTxMut.isPending,\n isError: buildTxMut.isError,\n isSuccess: buildTxMut.isSuccess,\n error: buildTxMut.error,\n };\n\n /* 5. submit Swap tx */\n\n /* 5.1. submit standalone Swap tx */\n\n const sendSwapTxMut = useSendMarketSwapTx({\n onSuccess: () => {\n logger.log(\"Swap tx success\");\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n });\n\n /* 5.2. submit Batch tx */\n const { forCurrentChain: canBatchTxs } = useCanBatchTxs();\n const { addTxWithApprovals } = useBatchWithApproveTxs();\n\n const batchTxMut = useSendBatchTx({\n onSuccess: () => {\n logger.log(\"Batch tx success\");\n },\n onError: (error) => {\n logger.error(\"Batch tx error\", error);\n },\n });\n\n /* 6. await Swap tx */\n\n /* 6.1. await standalone Swap tx */\n const swapTxMined = useAwaitTx({\n hash: sendSwapTxMut.txHash,\n chainId,\n });\n\n /* 6.2. await Batch tx */\n const batchTxMined = useAwaitCalls({\n id: batchTxMut.data?.id,\n });\n\n const swap: UseMarketFlowResult[\"swap\"] = {\n txHash: sendSwapTxMut.txHash,\n receipt: swapTxMined.data,\n /* tx sending */\n isConfirmingTX: sendSwapTxMut.isPending,\n isConfirmingTxError: sendSwapTxMut.isError,\n isTxSent: sendSwapTxMut.isSuccess,\n /* tx awaiting */\n isTxPending: swapTxMined.isLoading,\n isTxMined: swapTxMined.isSuccess,\n isTxAwaitingError: swapTxMined.isError,\n /* combined */\n isPending: sendSwapTxMut.isPending || swapTxMined.isLoading,\n isSuccess: swapTxMined.isSuccess, // final success\n isError: sendSwapTxMut.isError || swapTxMined.isError,\n error: sendSwapTxMut.error || swapTxMined.error,\n };\n\n // for a successful SendCalls execution there will either be one receipt only,\n // or several receipts with the last one for the last tx from the batch\n const lastCallsReceipt =\n batchTxMined.data?.receipts?.[batchTxMined.data.receipts.length - 1];\n\n const swapBatch: UseMarketFlowResult[\"swapBatch\"] = {\n canBatchTxs,\n callsId: batchTxMut.data?.id,\n txHash: lastCallsReceipt?.transactionHash,\n receipt: lastCallsReceipt,\n /* calls sending */\n isConfirmingCalls: batchTxMut.isPending,\n isConfirmingCallsError: batchTxMut.isError,\n isCallsSent: batchTxMut.isSuccess,\n /* calls awaiting */\n isCallsPending: batchTxMined.isLoading,\n isCallsMined: batchTxMined.isSuccess,\n isCallsAwaitingError: batchTxMined.isError,\n /* combined */\n isPending: batchTxMut.isPending || batchTxMined.isLoading,\n isSuccess: batchTxMined.isSuccess,\n isError: batchTxMut.isError || batchTxMined.isError,\n error: batchTxMut.error || batchTxMined.error,\n };\n\n const { address: account } = useAccount();\n\n const ensureTxReceipt = useEnsureTxReceipt();\n const ensureCallsStatus = useEnsureCallsStatus();\n\n // allows to abort (cancel) currently running flow,\n const currentAbortControllerRef = useRef<AbortController | null>(null);\n const usingPriceRef = useRef<OptimalRate | null>(null);\n\n const cancelFlow = () => {\n currentAbortControllerRef.current?.abort(new UserCancelledError());\n currentAbortControllerRef.current = null;\n\n usingPriceRef.current = null;\n };\n\n const receiverAddress = useSwapReceiverAddressValue();\n\n const { markNonceAsUsed, clearNonce } = useMarkPermit1Or2NonceAsUsed({\n chainId,\n });\n\n const { constructGasParams } = useConstructGasParams();\n\n const { partner, partnerAddress, partnerFeeBps, partnerTakesSurplus } =\n usePartner();\n\n const subscribeToPrice = useSubscribeToMarketPrice();\n\n const { onSwap } = useWidgetEvents();\n\n const submitSwapTx: (\n options?: RunMarketOptions & { lastPrice?: OptimalRate | null }\n ) => Promise<SubmitSwapResult> = async ({ onTxSent, lastPrice } = {}) => {\n // reset all mutations except the current one,\n // otherwise we'll have previous data (txs) as mutation results\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n\n // no sense in starting flow without a price,\n // which may be unavailable only if we are retrying and deltaPrice response now returns an error.\n // Otherwise this flow will be stopped by disabling Swap button in the first place\n assert(marketPrice, \"Market price is not available\");\n\n const abortController = new AbortController();\n currentAbortControllerRef.current = abortController;\n\n const signal = abortController.signal;\n\n let signedPermitResult: SignedPermitResult | undefined;\n\n let approveTxHash: Hash | undefined;\n let approveTxReceipt: TransactionReceipt | undefined;\n\n // at this point this is the syncronously available price\n const allowanceToSet = approval.allowanceToSet;\n const allowanceToPermit = signPermit.amountToPermit;\n // we use this allowance as a max allowance we will accept new prices for\n\n // marketPrice here is the starting price, available before async code and waiting\n let freshPrice = marketPrice;\n if (freshPrice.hmac === lastPrice?.hmac) {\n // we are resubmitting the Swap tx, because it failed the last time,\n // but the price hasn't updated yet, so force refetch\n const newPriceResult = await marketPriceQuery.refetch({\n cancelRefetch: false,\n });\n // check if cancelled during refetch\n signal.throwIfAborted();\n\n if (newPriceResult.data) {\n freshPrice = newPriceResult.data;\n }\n }\n let unsubscribeFromPrice: (() => void) | undefined;\n // this also resets previous usingPriceRef\n usingPriceRef.current = freshPrice;\n\n const shouldBatchTxs =\n canBatchTxs && approval.needsApproval && !!allowanceToSet;\n\n try {\n // need allowance\n if (!shouldBatchTxs && approval.needsApproval && allowanceToSet) {\n // queryKey used to fetch the current price,\n // it will be used for the subsequent price refetches as long as price params not changed\n const queryKey = marketPriceQueryKey;\n\n // should always be available\n if (queryKey) {\n // freeze allowanceToSet\n const approvedAmount = allowanceToSet;\n\n // subscribe to price updates to keep track of new prices for the same price params,\n // independently of the hook itself\n unsubscribeFromPrice = subscribeToPrice({\n queryKey,\n onData: (newPrice) => {\n if (signal.aborted) {\n // just in case unsubscribe in finally is not yet called\n // for the queued update with the price from an already cancelled flow\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n return;\n }\n\n // slightly higher amount if BUY with slippage\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: newPrice.srcAmount,\n destAmount: newPrice.destAmount,\n },\n resolvedSlippage,\n newPrice.side\n );\n\n // if new price fits into allowance, update it\n if (approvedAmount >= BigInt(amountsAfterSlippage.srcAmount)) {\n logger.log(\"~ fresh price ~\", newPrice);\n freshPrice = newPrice;\n usingPriceRef.current = freshPrice;\n }\n },\n });\n }\n\n const tryPermit =\n signPermit.isPermitSupported && signPermit.isPermitReadyToSign;\n try {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.request({ allowanceToSet });\n\n // Token doesn't support Permit\n // make an Approval tx\n approveTxHash = await approveTxMut.approveAsync({\n allowanceData: {\n allowanceToSet,\n },\n });\n\n approveOrPermitEvents.onApproveTx.sent({\n allowanceToSet,\n txHash: approveTxHash,\n });\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n const approveTxReceiptPromise = ensureTxReceipt({\n hash: approveTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:approveTx\", approveTxHash, data);\n },\n });\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"approve\",\n transactionHash: approveTxHash,\n receiptPromise: approveTxReceiptPromise,\n transactionSpecificData: {\n action: \"approve\",\n approvedAmount: allowanceToSet,\n tokenAddress: approval.token as Address,\n spenderAddress: approval.spender as Address,\n },\n });\n }\n\n approveTxReceipt = await approveTxReceiptPromise;\n\n approveOrPermitEvents.onApproveTx.confirmed({\n allowanceToSet,\n txHash: approveTxHash,\n txReceipt: approveTxReceipt,\n });\n\n logger.log(\"~ approveTx ~ receipt:\", approveTxReceipt);\n // @TODO check if we need to see if receipt.status === \"reverted\" and throw,\n // or if waitForTransactionReceipt already throws on such receipts\n } else {\n approveOrPermitEvents.onSignPermit.request({\n allowanceToSet: allowanceToPermit,\n });\n\n // sign Permit\n signedPermitResult = await signPermitMut.signPermitAsync({\n value: allowanceToPermit,\n });\n\n approveOrPermitEvents.onSignPermit.confirmed({\n allowanceToSet: allowanceToPermit,\n permit: signedPermitResult?.permitEncodedArgs,\n });\n }\n } catch (error) {\n if (!tryPermit) {\n approveOrPermitEvents.onApproveTx.failed({\n allowanceToSet,\n error: error as Error,\n txHash: approveTxHash, // won't necessarily be available\n });\n } else {\n approveOrPermitEvents.onSignPermit.failed({\n allowanceToSet: allowanceToPermit,\n error: error as Error,\n });\n }\n throw error;\n }\n }\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n assert(account, \"Account is not connected\");\n // as long as we had set approvedAmount, we will only get new prices that satisfy the allowance\n const marketPriceToUse = freshPrice;\n usingPriceRef.current = marketPriceToUse;\n // no longer need updates, unsubscribe\n unsubscribeFromPrice?.();\n unsubscribeFromPrice = undefined;\n\n assert(marketPriceToUse, \"Market price is not available\");\n\n const amountsAfterSlippage = applySlippage(\n {\n srcAmount: marketPriceToUse.srcAmount,\n destAmount: marketPriceToUse.destAmount,\n },\n resolvedSlippage,\n marketPriceToUse.side\n );\n\n // fresh gas params\n const gasParams = constructGasParams();\n\n const swapRequest: MarketSwapRequest = {\n swapTxInput: {\n userAddress: account,\n receiver: receiverAddress,\n srcToken: marketPriceToUse.srcToken,\n destToken: marketPriceToUse.destToken,\n srcDecimals: marketPriceToUse.srcDecimals,\n destDecimals: marketPriceToUse.destDecimals,\n\n partner,\n partnerAddress,\n partnerFeeBps,\n takeSurplus: partnerTakesSurplus,\n\n permit: signedPermitResult?.permitEncodedArgs, // just signed Permit signature\n\n priceRoute: marketPriceToUse,\n ...amountsAfterSlippage,\n },\n\n swapTxOptions: {\n // ignoreChecks: true,\n // gas estimate will break if only swap tx is estimated, but approve tx is not considered in a batch\n ignoreGasEstimate: shouldBatchTxs,\n // for Batch-capable wallets batch Approve+Swap tx have to ignore all checks\n ignoreAllowance: shouldBatchTxs,\n // onlyParams: true,\n degenMode: priceParams.degenMode,\n ...gasParams,\n },\n };\n\n const txParams = await buildTxMut.mutateAsync(swapRequest);\n\n // if aborted by this point, throw an error\n signal.throwIfAborted();\n\n let swapTxHash: Hash | undefined;\n let swapCallsId: string | undefined;\n\n onSwap?.({\n event: {\n name: \"Swap:request\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n },\n },\n });\n\n if (shouldBatchTxs) {\n const { calls } = await addTxWithApprovals({\n txsParams: [\n {\n to: txParams.to as Address,\n account: txParams.from as Address,\n data: txParams.data as Hex,\n value: BigInt(txParams.value),\n chainId: txParams.chainId,\n },\n ],\n approveProps: [\n {\n spender: approval.spender,\n allowanceToSet: approval.allowanceToSet,\n token: approval.token,\n chainId: approval.chainId,\n },\n ],\n });\n\n const sendCallsResult = await batchTxMut.sendCalls({\n txsParams: calls,\n });\n swapCallsId = sendCallsResult.id;\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsId: swapCallsId,\n },\n },\n });\n } else {\n swapTxHash = await sendSwapTxMut.sendTransactionAsync(txParams);\n onSwap?.({\n event: {\n name: \"Swap:sent\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txHash: swapTxHash,\n },\n },\n });\n }\n\n // no use aborting past this point, tx is already sent,\n // but we may want to connect this late abortion to tx cancellation, in the future\n\n // tx is sent, consider Token nonce as used\n if (signedPermitResult) {\n markNonceAsUsed(signedPermitResult.signedPermitData);\n }\n\n let swapCallsReceipt: CallsReceipt | undefined;\n let swapTxReceipt: TransactionReceipt | undefined;\n\n if (swapCallsId) {\n const sendCallsReceiptPromise = ensureCallsStatus({\n id: swapCallsId,\n }).then((status) => status.receipts?.[status.receipts.length - 1]);\n\n logger.log(\"~ swapTx ~ awaiting calls id :\", swapCallsId);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n callsId: swapCallsId,\n receiptPromise: sendCallsReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n },\n });\n }\n\n swapCallsReceipt = await sendCallsReceiptPromise;\n\n if (swapCallsReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n callsReceipt: swapCallsReceipt,\n callsId: swapCallsId,\n },\n },\n });\n }\n } else if (swapTxHash) {\n const swapTxReceiptPromise = ensureTxReceipt({\n hash: swapTxHash,\n chainId,\n onReplaced: (data) => {\n logger.log(\"onReplaced:swapTx\", swapTxHash, data);\n },\n });\n\n logger.log(\"~ swapTx ~ awaiting tx hash :\", swapTxHash);\n\n if (onTxSent) {\n onTxSent({\n chainId,\n action: \"swap\",\n transactionHash: swapTxHash,\n receiptPromise: swapTxReceiptPromise,\n transactionSpecificData: {\n action: \"swap\",\n source: \"local\",\n srcTokenAddress: marketPriceToUse.srcToken as Address,\n destTokenAddress: marketPriceToUse.destToken as Address,\n srcAmount: amountsAfterSlippage.srcAmount,\n destAmount: amountsAfterSlippage.destAmount,\n srcAmountUSD: marketPriceToUse.srcUSD,\n destAmountUSD: marketPriceToUse.destUSD,\n gasCost: marketPriceToUse.gasCost,\n gasCostUSD: marketPriceToUse.gasCostUSD,\n },\n });\n }\n\n swapTxReceipt = await swapTxReceiptPromise;\n\n if (swapTxReceipt) {\n onSwap?.({\n event: {\n name: \"Swap:confirmed\",\n params: {\n swapMode: \"market\",\n price: marketPriceToUse,\n txReceipt: swapTxReceipt,\n txHash: swapTxHash,\n },\n },\n });\n }\n }\n\n logger.log(\"~ swapTx ~ receipt:\", swapCallsReceipt || swapTxReceipt);\n // @TODO check if we need to see if receipt.status === \"reverted\" and trhow,\n // or if waitForTransactionReceipt already throws on such receipts\n\n return {\n tradeFlowType: marketSwapFlowType,\n approve: {\n txHash: approveTxHash,\n receipt: approveTxReceipt,\n },\n swap: {\n swapRequest,\n callsId: swapCallsId,\n txHash: swapTxHash,\n receipt: swapTxReceipt,\n callsReceipt: swapCallsReceipt,\n },\n marketPrice: marketPriceToUse,\n // @TODO add whatever else may be relevant\n account,\n receiverAddress,\n };\n } catch (error) {\n // Market swap failed, we can't be sure if nonce can be reused or it was incremented in a different tx\n // or even Order in the meantime\n if (signedPermitResult) {\n clearNonce(signedPermitResult.signedPermitData);\n }\n onSwap?.({\n event: {\n name: \"Swap:failed\",\n params: {\n swapMode: \"market\",\n error: error as Error,\n },\n },\n });\n throw error;\n } finally {\n // always unsubscribe if subscribed previously\n unsubscribeFromPrice?.();\n }\n };\n\n const marketSwapMut = useMutation({\n mutationFn: submitSwapTx,\n mutationKey: [MARKET_SWAP_MUTATION_KEY],\n onSuccess: (data) => {\n logger.log(\"Swap tx success\", data);\n },\n onError: (error) => {\n logger.error(\"Swap tx error\", error);\n },\n onSettled: () => {\n logger.log(\"Swap tx settled\");\n },\n });\n\n const runMarketSwapFlow = marketSwapMut.mutateAsync;\n\n const reset = () => {\n usingPriceRef.current = null;\n\n approveTxMut.reset();\n signPermitMut.reset();\n buildTxMut.reset();\n sendSwapTxMut.reset();\n batchTxMut.reset();\n marketSwapMut.reset();\n };\n\n const retryFlow = (options?: RunMarketOptions): Promise<SubmitSwapResult> => {\n const lastPrice = usingPriceRef.current;\n reset();\n return runMarketSwapFlow({ ...options, lastPrice });\n };\n\n // finalPrice if we reached that point, or usable price (based on allowance given)\n const usedPrice = usingPriceRef.current || marketPrice;\n\n const result = marketSwapMut.data;\n const submittedSwapRequest = result?.swap.swapRequest;\n\n /* 7. return result */\n return {\n tradeFlowType: marketSwapFlowType,\n chainId,\n runMarketSwapFlow,\n reset,\n cancelFlow,\n retryFlow,\n approval,\n signPermit,\n buildTxParams,\n swap,\n swapBatch,\n // marketSwapMut includes all steps' queries and mutations and returns more precise errors (including cancellation)\n isPending: marketSwapMut.isPending,\n isSuccess: marketSwapMut.isSuccess,\n isError: marketSwapMut.isError,\n error: marketSwapMut.error,\n result: marketSwapMut.data,\n usedPrice,\n freshPrice: marketPrice,\n submittedSwapRequest,\n };\n}\n"],"names":["marketSwapFlowType","MARKET_SWAP_MUTATION_KEY","useMarketFlow","marketPrice","_marketPrice","logger","useLogger","resolvedSlippage","useSlippage","swapSideFromInput","useSwapSide","priceParams","chainId","usePricesParams","result","marketPriceQuery","queryKey","marketPriceQueryKey","useMarketPriceQuery","query","enabled","data","approval","signPermit","approveTxMut","signPermitMut","events","approveOrPermitEvents","useApproveOrPermit","srcToken","srcAmount","spenderContractType","swapSide","side","tradeMode","buildTxMut","useBuildTx","mutationOptions","onSuccess","log","onError","error","buildTxParams","isPending","isError","isSuccess","sendSwapTxMut","useSendMarketSwapTx","forCurrentChain","canBatchTxs","useCanBatchTxs","addTxWithApprovals","useBatchWithApproveTxs","batchTxMut","useSendBatchTx","swapTxMined","useAwaitTx","hash","txHash","batchTxMined","useAwaitCalls","id","swap","receipt","isConfirmingTX","isConfirmingTxError","isTxSent","isTxPending","isLoading","isTxMined","isTxAwaitingError","lastCallsReceipt","receipts","length","swapBatch","callsId","transactionHash","isConfirmingCalls","isConfirmingCallsError","isCallsSent","isCallsPending","isCallsMined","isCallsAwaitingError","address","account","useAccount","ensureTxReceipt","useEnsureTxReceipt","ensureCallsStatus","useEnsureCallsStatus","currentAbortControllerRef","useRef","usingPriceRef","cancelFlow","current","abort","UserCancelledError","receiverAddress","useSwapReceiverAddressValue","markNonceAsUsed","clearNonce","useMarkPermit1Or2NonceAsUsed","constructGasParams","useConstructGasParams","partner","partnerAddress","partnerFeeBps","partnerTakesSurplus","usePartner","subscribeToPrice","useSubscribeToMarketPrice","onSwap","useWidgetEvents","submitSwapTx","onTxSent","lastPrice","reset","assert","abortController","AbortController","signal","signedPermitResult","approveTxHash","approveTxReceipt","allowanceToSet","allowanceToPermit","amountToPermit","freshPrice","hmac","newPriceResult","refetch","cancelRefetch","throwIfAborted","unsubscribeFromPrice","shouldBatchTxs","needsApproval","approvedAmount","onData","newPrice","aborted","undefined","amountsAfterSlippage","applySlippage","destAmount","BigInt","tryPermit","isPermitSupported","isPermitReadyToSign","onApproveTx","request","approveAsync","allowanceData","sent","approveTxReceiptPromise","onReplaced","action","receiptPromise","transactionSpecificData","tokenAddress","token","spenderAddress","spender","confirmed","txReceipt","onSignPermit","signPermitAsync","value","permit","permitEncodedArgs","failed","marketPriceToUse","gasParams","swapRequest","swapTxInput","userAddress","receiver","destToken","srcDecimals","destDecimals","takeSurplus","priceRoute","swapTxOptions","ignoreGasEstimate","ignoreAllowance","degenMode","txParams","mutateAsync","swapTxHash","swapCallsId","event","name","params","swapMode","price","calls","txsParams","to","from","approveProps","sendCallsResult","sendCalls","sendTransactionAsync","signedPermitData","swapCallsReceipt","swapTxReceipt","sendCallsReceiptPromise","then","status","source","srcTokenAddress","destTokenAddress","srcAmountUSD","srcUSD","destAmountUSD","destUSD","gasCost","callsReceipt","swapTxReceiptPromise","gasCostUSD","tradeFlowType","approve","marketSwapMut","useMutation","mutationFn","mutationKey","onSettled","runMarketSwapFlow","retryFlow","options","usedPrice","submittedSwapRequest"],"mappings":"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"}
|
package/dist/styles.css
CHANGED
|
@@ -1308,6 +1308,9 @@
|
|
|
1308
1308
|
.velora-widget.velora-widget .border-secondary-radical-red-1 {
|
|
1309
1309
|
border-color: var(--secondary-radical_red-1);
|
|
1310
1310
|
}
|
|
1311
|
+
.velora-widget.velora-widget .border-secondary-shamrock-green-2 {
|
|
1312
|
+
border-color: var(--secondary-shamrock_green-2);
|
|
1313
|
+
}
|
|
1311
1314
|
.velora-widget.velora-widget .border-transparent {
|
|
1312
1315
|
border-color: #0000;
|
|
1313
1316
|
}
|
|
@@ -1472,6 +1475,9 @@
|
|
|
1472
1475
|
.velora-widget.velora-widget .stroke-secondary-orange-peel-1 {
|
|
1473
1476
|
stroke: var(--secondary-orange_peel-1);
|
|
1474
1477
|
}
|
|
1478
|
+
.velora-widget.velora-widget .stroke-secondary-shamrock-green-2 {
|
|
1479
|
+
stroke: var(--secondary-shamrock_green-2);
|
|
1480
|
+
}
|
|
1475
1481
|
.velora-widget.velora-widget .p-0 {
|
|
1476
1482
|
padding: calc(var(--spacing) * 0);
|
|
1477
1483
|
}
|
|
@@ -1595,6 +1601,9 @@
|
|
|
1595
1601
|
.velora-widget.velora-widget .pt-8 {
|
|
1596
1602
|
padding-top: calc(var(--spacing) * 8);
|
|
1597
1603
|
}
|
|
1604
|
+
.velora-widget.velora-widget .pt-20 {
|
|
1605
|
+
padding-top: calc(var(--spacing) * 20);
|
|
1606
|
+
}
|
|
1598
1607
|
.velora-widget.velora-widget .pt-\[2px\] {
|
|
1599
1608
|
padding-top: 2px;
|
|
1600
1609
|
}
|
|
@@ -2317,6 +2326,9 @@
|
|
|
2317
2326
|
.velora-widget.velora-widget .focus-visible\:border-ring:focus-visible {
|
|
2318
2327
|
border-color: var(--ring);
|
|
2319
2328
|
}
|
|
2329
|
+
.velora-widget.velora-widget .focus-visible\:border-secondary-shamrock-green-2:focus-visible {
|
|
2330
|
+
border-color: var(--secondary-shamrock_green-2);
|
|
2331
|
+
}
|
|
2320
2332
|
.velora-widget.velora-widget .focus-visible\:ring-\[3px\]:focus-visible {
|
|
2321
2333
|
--tw-ring-shadow: var(--tw-ring-inset, ) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
|
|
2322
2334
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
|
@@ -2646,6 +2658,9 @@
|
|
|
2646
2658
|
.velora-widget.velora-widget .dark\:border-input:is(.velora-widget.dark *) {
|
|
2647
2659
|
border-color: var(--input);
|
|
2648
2660
|
}
|
|
2661
|
+
.velora-widget.velora-widget .dark\:border-secondary-shamrock-green-2:is(.velora-widget.dark *) {
|
|
2662
|
+
border-color: var(--secondary-shamrock_green-2);
|
|
2663
|
+
}
|
|
2649
2664
|
.velora-widget.velora-widget .dark\:border-transparent:is(.velora-widget.dark *) {
|
|
2650
2665
|
border-color: #0000;
|
|
2651
2666
|
}
|
|
@@ -2743,6 +2758,9 @@
|
|
|
2743
2758
|
.velora-widget.velora-widget .dark\:text-secondary-radical-red-1:is(.velora-widget.dark *) {
|
|
2744
2759
|
color: var(--secondary-radical_red-1);
|
|
2745
2760
|
}
|
|
2761
|
+
.velora-widget.velora-widget .dark\:text-secondary-radical-red-2:is(.velora-widget.dark *) {
|
|
2762
|
+
color: var(--secondary-radical_red-2);
|
|
2763
|
+
}
|
|
2746
2764
|
.velora-widget.velora-widget .dark\:text-white:is(.velora-widget.dark *) {
|
|
2747
2765
|
color: var(--color-white);
|
|
2748
2766
|
}
|
|
@@ -2829,6 +2847,9 @@
|
|
|
2829
2847
|
.velora-widget.velora-widget .dark\:focus-visible\:border-primary-azul-1:is(.velora-widget.dark *):focus-visible {
|
|
2830
2848
|
border-color: var(--primary-azul-1);
|
|
2831
2849
|
}
|
|
2850
|
+
.velora-widget.velora-widget .dark\:focus-visible\:border-secondary-shamrock-green-2:is(.velora-widget.dark *):focus-visible {
|
|
2851
|
+
border-color: var(--secondary-shamrock_green-2);
|
|
2852
|
+
}
|
|
2832
2853
|
.velora-widget.velora-widget .dark\:focus-visible\:ring-destructive\/40:is(.velora-widget.dark *):focus-visible {
|
|
2833
2854
|
--tw-ring-color: var(--destructive);
|
|
2834
2855
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@velora-dex/widget",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.9-dev.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"@tanstack/react-pacer": "^0.14.0",
|
|
77
77
|
"@tanstack/react-virtual": "^3.13.12",
|
|
78
78
|
"@uniswap/token-lists": "1.0.0-beta.34",
|
|
79
|
-
"@velora-dex/sdk": "9.3.
|
|
79
|
+
"@velora-dex/sdk": "9.3.5-dev.1",
|
|
80
80
|
"@wagmi/core": "^2.18.1",
|
|
81
81
|
"axios": "^1.11.0",
|
|
82
82
|
"big.js": "^7.0.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useIsPriceImpactUnavailable.d.ts","sourceRoot":"","sources":["../../../src/core/swapDetails/useIsPriceImpactUnavailable.ts"],"names":[],"mappings":"AAKA,wBAAgB,+BAA+B,YAiB9C"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { d as distExports } from '../../_virtual/index.js';
|
|
2
|
-
import { useCurrentSwapPrice } from '../../hooks/swap/prices/useSwapPrices.js';
|
|
3
|
-
import { getPriceImpact } from '../../lib/utils/priceImpact.js';
|
|
4
|
-
import { useSwapTokenTo } from '../inputs/state/selectedTokenAtom.js';
|
|
5
|
-
import { isDeltaPrice } from '../../hooks/swap/prices/delta/queries/useDeltaPriceQuery.js';
|
|
6
|
-
|
|
7
|
-
function useIsSwapPriceImpactUnavailable() {
|
|
8
|
-
const $ = distExports.c(3);
|
|
9
|
-
const tokenTo = useSwapTokenTo();
|
|
10
|
-
let t0;
|
|
11
|
-
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
|
12
|
-
t0 = {
|
|
13
|
-
enabled: false
|
|
14
|
-
};
|
|
15
|
-
$[0] = t0;
|
|
16
|
-
} else {
|
|
17
|
-
t0 = $[0];
|
|
18
|
-
}
|
|
19
|
-
const {
|
|
20
|
-
isLoading,
|
|
21
|
-
price
|
|
22
|
-
} = useCurrentSwapPrice(t0);
|
|
23
|
-
let t1;
|
|
24
|
-
if ($[1] !== price) {
|
|
25
|
-
t1 = !!price && getPriceImpact({
|
|
26
|
-
srcUSD: price.srcUSD,
|
|
27
|
-
destUSD: isDeltaPrice(price) ? price.receivedDestUSD : price.destUSD
|
|
28
|
-
}).isUnavailable;
|
|
29
|
-
$[1] = price;
|
|
30
|
-
$[2] = t1;
|
|
31
|
-
} else {
|
|
32
|
-
t1 = $[2];
|
|
33
|
-
}
|
|
34
|
-
const isUnavailable = t1;
|
|
35
|
-
const shouldShowPriceImpactWarning = !!price && isUnavailable && !isLoading && !!tokenTo;
|
|
36
|
-
return shouldShowPriceImpactWarning;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { useIsSwapPriceImpactUnavailable };
|
|
40
|
-
//# sourceMappingURL=useIsPriceImpactUnavailable.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useIsPriceImpactUnavailable.js","sources":["../../../src/core/swapDetails/useIsPriceImpactUnavailable.ts"],"sourcesContent":["import { useCurrentSwapPrice } from \"@/hooks/swap/prices/useSwapPrices\";\nimport { getPriceImpact } from \"@/lib/utils/priceImpact\";\nimport { useSwapTokenTo } from \"../inputs/state/selectedTokenAtom\";\nimport { isDeltaPrice } from \"@/hooks/swap/prices/delta/queries/useDeltaPriceQuery\";\n\nexport function useIsSwapPriceImpactUnavailable() {\n const tokenTo = useSwapTokenTo();\n\n const { isLoading, price } = useCurrentSwapPrice({\n enabled: false,\n });\n const isUnavailable =\n !!price &&\n getPriceImpact({\n srcUSD: price.srcUSD,\n destUSD: isDeltaPrice(price) ? price.receivedDestUSD : price.destUSD,\n }).isUnavailable;\n // Default to false, only show when explicitly unavailable and not loading\n const shouldShowPriceImpactWarning =\n !!price && isUnavailable && !isLoading && !!tokenTo;\n\n return shouldShowPriceImpactWarning;\n}\n"],"names":["useIsSwapPriceImpactUnavailable","$","_c","tokenTo","useSwapTokenTo","t0","Symbol","for","enabled","isLoading","price","useCurrentSwapPrice","t1","getPriceImpact","srcUSD","destUSD","isDeltaPrice","receivedDestUSD","isUnavailable","shouldShowPriceImpactWarning"],"mappings":";;;;;;AAKO,SAAAA,+BAAAA,GAAA;AAAA,EAAA,MAAAC,CAAAA,GAAAC,cAAA,CAAA,CAAA;AACL,EAAA,MAAAC,UAAgBC,cAAAA,EAAe;AAAE,EAAA,IAAAC,EAAAA;AAAA,EAAA,IAAAJ,EAAA,CAAA,CAAA,KAAAK,MAAAA,CAAAC,GAAAA,CAAA,2BAAA,CAAA,EAAA;AAEgBF,IAAAA,EAAAA,GAAA;AAAA,MAAAG,OAAAA,EACtC;AAAA,KACX;AAACP,IAAAA,CAAAA,MAAAI,EAAAA;AAAAA,EAAA,CAAA,MAAA;AAAAA,IAAAA,EAAAA,GAAAJ,EAAA,CAAA,CAAA;AAAA,EAAA;AAFD,EAAA,MAAA;AAAA,IAAAQ,SAAAA;AAAAA,IAAAC;AAAAA,GAAA,GAA6BC,oBAAoBN,EAEhD,CAAA;AAAE,EAAA,IAAAO,EAAAA;AAAA,EAAA,IAAAX,CAAAA,QAAAS,KAAAA,EAAA;AAEDE,IAAAA,EAAAA,GAAA,CAAC,CAACF,KAAAA,IACFG,cAAAA,CAAe;AAAA,MAAAC,QACLJ,KAAAA,CAAKI,MAAAA;AAAAA,MAAOC,SACXC,YAAAA,CAAaN,KAA6C,CAAA,GAApCA,KAAAA,CAAKO,kBAAmBP,KAAAA,CAAKK;AAAAA,KAC7D,CAAA,CAACG,aAAAA;AAAcjB,IAAAA,CAAAA,MAAAS,KAAAA;AAAAT,IAAAA,CAAAA,MAAAW,EAAAA;AAAAA,EAAA,CAAA,MAAA;AAAAA,IAAAA,EAAAA,GAAAX,EAAA,CAAA,CAAA;AAAA,EAAA;AALlB,EAAA,MAAAiB,aAAAA,GACEN,EAAAA;AAMF,EAAA,MAAAO,4BAAAA,GACE,CAAC,CAACT,KAAAA,IAAFQ,iBAAA,CAA6BT,SAAAA,IAA7B,CAA2C,CAACN,OAAAA;AAAQ,EAAA,OAE/CgB,4BAAAA;AAA4B;;;;"}
|