diff --git a/RELEASE b/RELEASE index bbca00a5f67..690b5eda3e8 100644 --- a/RELEASE +++ b/RELEASE @@ -1,6 +1,6 @@ IPFS hash of the deployment: -- CIDv0: `QmSmvQMNhi4BXMeBcTtjzRqkSkUM6BrLUjoiF4iqydKdxD` -- CIDv1: `bafybeicb5abvqxhmsyufrrsh67h2q6cdomr673nes6umxcq2uvnmcnglei` +- CIDv0: `QmcrR5faskhjW7PVj7g5tA4gAqASyDvySRHAQes9fVCSvJ` +- CIDv1: `bafybeigxuoq3myrrht67aku2bu7jqvr6rdfwfp6bycbgu7tbybbktumvz4` The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org). @@ -10,15 +10,15 @@ You can also access the Uniswap Interface from an IPFS gateway. Your Uniswap settings are never remembered across different URLs. IPFS gateways: -- https://bafybeicb5abvqxhmsyufrrsh67h2q6cdomr673nes6umxcq2uvnmcnglei.ipfs.dweb.link/ -- https://bafybeicb5abvqxhmsyufrrsh67h2q6cdomr673nes6umxcq2uvnmcnglei.ipfs.cf-ipfs.com/ -- [ipfs://QmSmvQMNhi4BXMeBcTtjzRqkSkUM6BrLUjoiF4iqydKdxD/](ipfs://QmSmvQMNhi4BXMeBcTtjzRqkSkUM6BrLUjoiF4iqydKdxD/) +- https://bafybeigxuoq3myrrht67aku2bu7jqvr6rdfwfp6bycbgu7tbybbktumvz4.ipfs.dweb.link/ +- https://bafybeigxuoq3myrrht67aku2bu7jqvr6rdfwfp6bycbgu7tbybbktumvz4.ipfs.cf-ipfs.com/ +- [ipfs://QmcrR5faskhjW7PVj7g5tA4gAqASyDvySRHAQes9fVCSvJ/](ipfs://QmcrR5faskhjW7PVj7g5tA4gAqASyDvySRHAQes9fVCSvJ/) -### 5.67.2 (2025-01-23) +### 5.67.3 (2025-01-23) ### Bug Fixes -* **web:** send updated user property chainId (#15417) 731a83d +* **web:** lp flow error logging updates (#15424) d7de5d5 diff --git a/VERSION b/VERSION index f67efc94b4b..d0cc9af37a2 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -web/5.67.2 \ No newline at end of file +web/5.67.3 \ No newline at end of file diff --git a/apps/web/src/components/IncreaseLiquidity/IncreaseLiquidityTxContext.tsx b/apps/web/src/components/IncreaseLiquidity/IncreaseLiquidityTxContext.tsx index f19769732a7..6857e5792ee 100644 --- a/apps/web/src/components/IncreaseLiquidity/IncreaseLiquidityTxContext.tsx +++ b/apps/web/src/components/IncreaseLiquidity/IncreaseLiquidityTxContext.tsx @@ -3,7 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' import { Currency, CurrencyAmount } from '@uniswap/sdk-core' import { useIncreaseLiquidityContext } from 'components/IncreaseLiquidity/IncreaseLiquidityContext' import { useModalLiquidityInitialState } from 'components/Liquidity/hooks' -import { getProtocolItems } from 'components/Liquidity/utils' +import { getProtocolItems, parseErrorMessageTitle } from 'components/Liquidity/utils' import { ZERO_ADDRESS } from 'constants/misc' import { getCurrencyAddressForTradingApi } from 'pages/Pool/Positions/create/utils' import { PropsWithChildren, createContext, useContext, useMemo } from 'react' @@ -69,18 +69,18 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr } = useCheckLpApprovalQuery({ params: increaseLiquidityApprovalParams, staleTime: 5 * ONE_SECOND_MS, - enabled: !error, + enabled: !!increaseLiquidityApprovalParams && !error, }) if (approvalError) { logger.info( 'IncreaseLiquidityTxContext', 'IncreaseLiquidityTxContext', - 'CheckLpApprovalQuery', - JSON.stringify({ - error: approvalError, - increaseLiquidityApprovalParams, - }), + parseErrorMessageTitle(approvalError, 'unknown CheckLpApprovalQuery'), + { + error: JSON.stringify(approvalError), + increaseLiquidityApprovalParams: JSON.stringify(increaseLiquidityApprovalParams), + }, ) } @@ -168,10 +168,15 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr const { increase, gasFee: actualGasFee, dependentAmount } = increaseCalldata || {} if (calldataError) { - logger.warn('IncreaseLiquidityTxContext', 'IncreaseLiquidityTxContext', 'IncreaseLpPositionCalldataQuery', { - error: JSON.stringify(calldataError), - increaseCalldataQueryParams: JSON.stringify(increaseCalldataQueryParams), - }) + logger.info( + 'IncreaseLiquidityTxContext', + 'IncreaseLiquidityTxContext', + parseErrorMessageTitle(calldataError, 'unknown IncreaseLpPositionCalldataQuery'), + { + error: JSON.stringify(calldataError), + increaseCalldataQueryParams: JSON.stringify(increaseCalldataQueryParams), + }, + ) } const { value: calculatedGasFee } = useTransactionGasFee(increase, !!actualGasFee) diff --git a/apps/web/src/components/Liquidity/utils.tsx b/apps/web/src/components/Liquidity/utils.tsx index bd7914a48b3..7757aaf0016 100644 --- a/apps/web/src/components/Liquidity/utils.tsx +++ b/apps/web/src/components/Liquidity/utils.tsx @@ -656,3 +656,12 @@ export function getDisplayedAmountsFromDependentAmount({ displayCurrencyAmounts: currencyAmounts, } } + +export function parseErrorMessageTitle(error: unknown, defaultTitle: string) { + if (!error) { + return defaultTitle + } + + const errorWithData = error as { data?: { detail?: string }; name?: string } + return errorWithData.data?.detail || errorWithData.name || defaultTitle +} diff --git a/apps/web/src/components/RemoveLiquidity/hooks.ts b/apps/web/src/components/RemoveLiquidity/hooks.ts index d782fea25af..743cb2fdcea 100644 --- a/apps/web/src/components/RemoveLiquidity/hooks.ts +++ b/apps/web/src/components/RemoveLiquidity/hooks.ts @@ -1,7 +1,7 @@ // eslint-disable-next-line no-restricted-imports import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' import { useV3OrV4PositionDerivedInfo } from 'components/Liquidity/hooks' -import { getProtocolItems } from 'components/Liquidity/utils' +import { getProtocolItems, parseErrorMessageTitle } from 'components/Liquidity/utils' import { useRemoveLiquidityModalContext } from 'components/RemoveLiquidity/RemoveLiquidityModalContext' import { RemoveLiquidityTxInfo } from 'components/RemoveLiquidity/RemoveLiquidityTxContext' import { ZERO_ADDRESS } from 'constants/misc' @@ -56,17 +56,18 @@ export function useRemoveLiquidityTxAndGasInfo({ account }: { account?: string } } = useCheckLpApprovalQuery({ params: v2LpTokenApprovalQueryParams, staleTime: 5 * ONE_SECOND_MS, + enabled: Boolean(v2LpTokenApprovalQueryParams), }) if (approvalError) { logger.info( 'RemoveLiquidityTxAndGasInfo', 'RemoveLiquidityTxAndGasInfo', - 'CheckLpApprovalQuery', - JSON.stringify({ - error: approvalError, - v2LpTokenApprovalQueryParams, - }), + parseErrorMessageTitle(approvalError, 'unkown CheckLpApprovalQuery'), + { + error: JSON.stringify(approvalError), + v2LpTokenApprovalQueryParams: JSON.stringify(v2LpTokenApprovalQueryParams), + }, ) } @@ -141,19 +142,20 @@ export function useRemoveLiquidityTxAndGasInfo({ account }: { account?: string } deadlineInMinutes: customDeadline, refetchInterval: 5 * ONE_SECOND_MS, enabled: - (!percentInvalid && !v2LpTokenApprovalQueryParams) || - (!v2ApprovalLoading && !approvalError && Boolean(v2LpTokenApproval)), + !!decreaseCalldataQueryParams && + ((!percentInvalid && !v2LpTokenApprovalQueryParams) || + (!v2ApprovalLoading && !approvalError && Boolean(v2LpTokenApproval))), }) if (calldataError) { logger.info( 'RemoveLiquidityTxAndGasInfo', 'RemoveLiquidityTxAndGasInfo', - 'DecreaseLpPositionCalldataQuery', - JSON.stringify({ - error: calldataError, - decreaseCalldataQueryParams, - }), + parseErrorMessageTitle(calldataError, 'DecreaseLpPositionCalldataQuery'), + { + error: JSON.stringify(calldataError), + decreaseCalldataQueryParams: JSON.stringify(decreaseCalldataQueryParams), + }, ) } diff --git a/apps/web/src/pages/MigrateV3/MigrateV3LiquidityTxContext.tsx b/apps/web/src/pages/MigrateV3/MigrateV3LiquidityTxContext.tsx index 944ca1f47b0..20bb0a4a08b 100644 --- a/apps/web/src/pages/MigrateV3/MigrateV3LiquidityTxContext.tsx +++ b/apps/web/src/pages/MigrateV3/MigrateV3LiquidityTxContext.tsx @@ -3,6 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' import { Currency, CurrencyAmount } from '@uniswap/sdk-core' import { useV3OrV4PositionDerivedInfo } from 'components/Liquidity/hooks' import { V3PositionInfo } from 'components/Liquidity/types' +import { parseErrorMessageTitle } from 'components/Liquidity/utils' import { ZERO_ADDRESS } from 'constants/misc' import { useCreatePositionContext, usePriceRangeContext } from 'pages/Pool/Positions/create/CreatePositionContext' import { PropsWithChildren, createContext, useContext, useMemo } from 'react' @@ -75,17 +76,18 @@ export function MigrateV3PositionTxContextProvider({ 'x-universal-router-version': '2.0', }, staleTime: 5 * ONE_SECOND_MS, + enabled: Boolean(increaseLiquidityApprovalParams), }) if (approvalError) { logger.info( 'MigrateV3LiquidityTxContext', 'MigrateV3LiquidityTxContext', - 'CheckLpApprovalQuery', - JSON.stringify({ - error: approvalError, - increaseLiquidityApprovalParams, - }), + parseErrorMessageTitle(approvalError, 'unknown CheckLpApprovalQuery'), + { + error: JSON.stringify(approvalError), + increaseLiquidityApprovalParams: JSON.stringify(increaseLiquidityApprovalParams), + }, ) } @@ -189,11 +191,11 @@ export function MigrateV3PositionTxContextProvider({ logger.info( 'MigrateV3LiquidityTxContext', 'MigrateV3LiquidityTxContext', - 'MigrateLpPositionCalldataQuery', - JSON.stringify({ - error: migrateError, + parseErrorMessageTitle(migrateError, 'unknown MigrateLpPositionCalldataQuery'), + { + error: JSON.stringify(migrateError), migrateCalldataQueryParams: JSON.stringify(migratePositionRequestArgs), - }), + }, ) } diff --git a/apps/web/src/pages/Pool/Positions/ClaimFeeModal.tsx b/apps/web/src/pages/Pool/Positions/ClaimFeeModal.tsx index eef1247de1a..e0a66d64037 100644 --- a/apps/web/src/pages/Pool/Positions/ClaimFeeModal.tsx +++ b/apps/web/src/pages/Pool/Positions/ClaimFeeModal.tsx @@ -3,7 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' import { LoaderButton } from 'components/Button/LoaderButton' import { getLPBaseAnalyticsProperties } from 'components/Liquidity/analytics' import { useModalLiquidityInitialState, useV3OrV4PositionDerivedInfo } from 'components/Liquidity/hooks' -import { getProtocolItems } from 'components/Liquidity/utils' +import { getProtocolItems, parseErrorMessageTitle } from 'components/Liquidity/utils' import { GetHelpHeader } from 'components/Modal/GetHelpHeader' import { ZERO_ADDRESS } from 'constants/misc' import { useAccount } from 'hooks/useAccount' @@ -112,18 +112,15 @@ export function ClaimFeeModal() { refetch, } = useClaimLpFeesCalldataQuery({ params: claimLpFeesParams, + enabled: Boolean(claimLpFeesParams), }) - if (error) { - logger.info( - 'ClaimFeeModal', - 'ClaimFeeModal', - 'ClaimLPFeesCalldataQuery', - JSON.stringify({ - error, - claimLpFeesParams, - }), - ) + // prevent logging of the empty error object for now since those are burying signals + if (error && Object.keys(error).length > 0) { + logger.info('ClaimFeeModal', 'ClaimFeeModal', parseErrorMessageTitle(error, 'unknown ClaimLPFeesCalldataQuery'), { + error: JSON.stringify(error), + claimLpFeesParams: JSON.stringify(claimLpFeesParams), + }) } const txInfo = useMemo(() => { diff --git a/apps/web/src/pages/Pool/Positions/create/ContextProviders.tsx b/apps/web/src/pages/Pool/Positions/create/ContextProviders.tsx index 60604789bd0..bfbb7966721 100644 --- a/apps/web/src/pages/Pool/Positions/create/ContextProviders.tsx +++ b/apps/web/src/pages/Pool/Positions/create/ContextProviders.tsx @@ -1,5 +1,6 @@ import { FeeTierSearchModal } from 'components/Liquidity/FeeTierSearchModal' import { DepositState } from 'components/Liquidity/types' +import { parseErrorMessageTitle } from 'components/Liquidity/utils' import { CreatePositionContext, CreateTxContext, @@ -168,18 +169,18 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod } = useCheckLpApprovalQuery({ params: addLiquidityApprovalParams, staleTime: 5 * ONE_SECOND_MS, - enabled: !hasError, + enabled: !!addLiquidityApprovalParams && !hasError, }) if (approvalError) { logger.info( 'CreateTxContextProvider', 'CreateTxContextProvider', - 'CheckLpApprovalQuery', - JSON.stringify({ - error: approvalError, - addLiquidityApprovalParams, - }), + parseErrorMessageTitle(approvalError, 'unknown CheckLpApprovalQuery'), + { + error: JSON.stringify(approvalError), + addLiquidityApprovalParams: JSON.stringify(addLiquidityApprovalParams), + }, ) } @@ -221,18 +222,23 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod params: createCalldataQueryParams, deadlineInMinutes: swapSettings.customDeadline, refetchInterval: 5 * ONE_SECOND_MS, - enabled: !hasError && !approvalLoading && !approvalError && Boolean(approvalCalldata), + enabled: + !hasError && + !approvalLoading && + !approvalError && + Boolean(approvalCalldata) && + Boolean(createCalldataQueryParams), }) if (createError) { logger.info( 'CreateTxContextProvider', 'CreateTxContextProvider', - 'CreateLpPositionCalldataQuery', - JSON.stringify({ - error: createError, - createCalldataQueryParams, - }), + parseErrorMessageTitle(createError, 'unknown CreateLpPositionCalldataQuery'), + { + error: JSON.stringify(createError), + createCalldataQueryParams: JSON.stringify(createCalldataQueryParams), + }, ) } diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts index 40ab5920501..6eab5e81736 100644 --- a/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts +++ b/packages/uniswap/src/data/apiClients/tradingApi/useCheckLpApprovalQuery.ts @@ -15,10 +15,9 @@ export function useCheckLpApprovalQuery({ return useQuery({ queryKey, - enabled: !!params, queryFn: async () => { if (!params) { - throw new Error('Params are required') + throw { name: 'Params are required' } } return await checkLpApproval(params, headers) }, diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts index 335804ee16c..bc5db98e928 100644 --- a/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts +++ b/packages/uniswap/src/data/apiClients/tradingApi/useClaimLpFeesCalldataQuery.ts @@ -12,10 +12,9 @@ export function useClaimLpFeesCalldataQuery({ return useQuery({ queryKey, - enabled: !!params, queryFn: async () => { if (!params) { - throw new Error('Params are required') + throw { name: 'Params are required' } } return await claimLpFees(params) }, diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts index 8185d8ca0c1..131f08fe587 100644 --- a/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts +++ b/packages/uniswap/src/data/apiClients/tradingApi/useCreateLpPositionCalldataQuery.ts @@ -18,10 +18,9 @@ export function useCreateLpPositionCalldataQuery({ return useQuery({ queryKey, - enabled: !!params, queryFn: async () => { if (!params) { - throw new Error('Params are required') + throw { name: 'Params are required' } } return await createLpPosition(paramsWithDeadline) }, diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts index 0c85401e79d..2989846b8a9 100644 --- a/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts +++ b/packages/uniswap/src/data/apiClients/tradingApi/useDecreaseLpPositionCalldataQuery.ts @@ -19,10 +19,9 @@ export function useDecreaseLpPositionCalldataQuery({ return useQuery({ queryKey, - enabled: !!params, queryFn: async () => { if (!params) { - throw new Error('Params are required') + throw { name: 'Params are required' } } return await decreaseLpPosition(paramsWithDeadline) }, diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts index 0fa7d0c2be1..bcc7c29449f 100644 --- a/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts +++ b/packages/uniswap/src/data/apiClients/tradingApi/useIncreaseLpPositionCalldataQuery.ts @@ -19,10 +19,9 @@ export function useIncreaseLpPositionCalldataQuery({ const paramsWithDeadline = { ...params, deadline } return useQuery({ queryKey, - enabled: !!params, queryFn: async () => { if (!params) { - throw new Error('Params are required') + throw { name: 'Params are required' } } return await increaseLpPosition(paramsWithDeadline) }, diff --git a/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts b/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts index e366c6d464c..4e5f857c50f 100644 --- a/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts +++ b/packages/uniswap/src/data/apiClients/tradingApi/useMigrateV3LpPositionCalldataQuery.ts @@ -15,10 +15,9 @@ export function useMigrateV3LpPositionCalldataQuery({ return useQuery({ queryKey, - enabled: !!params, queryFn: async () => { if (!params) { - throw new Error('Params are required') + throw { name: 'Params are required' } } return await migrateLpPosition(params) },