ci(release): publish latest release

parent 63abe139
IPFS hash of the deployment: IPFS hash of the deployment:
- CIDv0: `QmSmvQMNhi4BXMeBcTtjzRqkSkUM6BrLUjoiF4iqydKdxD` - CIDv0: `QmcrR5faskhjW7PVj7g5tA4gAqASyDvySRHAQes9fVCSvJ`
- CIDv1: `bafybeicb5abvqxhmsyufrrsh67h2q6cdomr673nes6umxcq2uvnmcnglei` - CIDv1: `bafybeigxuoq3myrrht67aku2bu7jqvr6rdfwfp6bycbgu7tbybbktumvz4`
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org). 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. ...@@ -10,15 +10,15 @@ You can also access the Uniswap Interface from an IPFS gateway.
Your Uniswap settings are never remembered across different URLs. Your Uniswap settings are never remembered across different URLs.
IPFS gateways: IPFS gateways:
- https://bafybeicb5abvqxhmsyufrrsh67h2q6cdomr673nes6umxcq2uvnmcnglei.ipfs.dweb.link/ - https://bafybeigxuoq3myrrht67aku2bu7jqvr6rdfwfp6bycbgu7tbybbktumvz4.ipfs.dweb.link/
- https://bafybeicb5abvqxhmsyufrrsh67h2q6cdomr673nes6umxcq2uvnmcnglei.ipfs.cf-ipfs.com/ - https://bafybeigxuoq3myrrht67aku2bu7jqvr6rdfwfp6bycbgu7tbybbktumvz4.ipfs.cf-ipfs.com/
- [ipfs://QmSmvQMNhi4BXMeBcTtjzRqkSkUM6BrLUjoiF4iqydKdxD/](ipfs://QmSmvQMNhi4BXMeBcTtjzRqkSkUM6BrLUjoiF4iqydKdxD/) - [ipfs://QmcrR5faskhjW7PVj7g5tA4gAqASyDvySRHAQes9fVCSvJ/](ipfs://QmcrR5faskhjW7PVj7g5tA4gAqASyDvySRHAQes9fVCSvJ/)
### 5.67.2 (2025-01-23) ### 5.67.3 (2025-01-23)
### Bug Fixes ### Bug Fixes
* **web:** send updated user property chainId (#15417) 731a83d * **web:** lp flow error logging updates (#15424) d7de5d5
web/5.67.2 web/5.67.3
\ No newline at end of file \ No newline at end of file
...@@ -3,7 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' ...@@ -3,7 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb'
import { Currency, CurrencyAmount } from '@uniswap/sdk-core' import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
import { useIncreaseLiquidityContext } from 'components/IncreaseLiquidity/IncreaseLiquidityContext' import { useIncreaseLiquidityContext } from 'components/IncreaseLiquidity/IncreaseLiquidityContext'
import { useModalLiquidityInitialState } from 'components/Liquidity/hooks' 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 { ZERO_ADDRESS } from 'constants/misc'
import { getCurrencyAddressForTradingApi } from 'pages/Pool/Positions/create/utils' import { getCurrencyAddressForTradingApi } from 'pages/Pool/Positions/create/utils'
import { PropsWithChildren, createContext, useContext, useMemo } from 'react' import { PropsWithChildren, createContext, useContext, useMemo } from 'react'
...@@ -69,18 +69,18 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr ...@@ -69,18 +69,18 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr
} = useCheckLpApprovalQuery({ } = useCheckLpApprovalQuery({
params: increaseLiquidityApprovalParams, params: increaseLiquidityApprovalParams,
staleTime: 5 * ONE_SECOND_MS, staleTime: 5 * ONE_SECOND_MS,
enabled: !error, enabled: !!increaseLiquidityApprovalParams && !error,
}) })
if (approvalError) { if (approvalError) {
logger.info( logger.info(
'IncreaseLiquidityTxContext', 'IncreaseLiquidityTxContext',
'IncreaseLiquidityTxContext', 'IncreaseLiquidityTxContext',
'CheckLpApprovalQuery', parseErrorMessageTitle(approvalError, 'unknown CheckLpApprovalQuery'),
JSON.stringify({ {
error: approvalError, error: JSON.stringify(approvalError),
increaseLiquidityApprovalParams, increaseLiquidityApprovalParams: JSON.stringify(increaseLiquidityApprovalParams),
}), },
) )
} }
...@@ -168,10 +168,15 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr ...@@ -168,10 +168,15 @@ export function IncreaseLiquidityTxContextProvider({ children }: PropsWithChildr
const { increase, gasFee: actualGasFee, dependentAmount } = increaseCalldata || {} const { increase, gasFee: actualGasFee, dependentAmount } = increaseCalldata || {}
if (calldataError) { if (calldataError) {
logger.warn('IncreaseLiquidityTxContext', 'IncreaseLiquidityTxContext', 'IncreaseLpPositionCalldataQuery', { logger.info(
error: JSON.stringify(calldataError), 'IncreaseLiquidityTxContext',
increaseCalldataQueryParams: JSON.stringify(increaseCalldataQueryParams), 'IncreaseLiquidityTxContext',
}) parseErrorMessageTitle(calldataError, 'unknown IncreaseLpPositionCalldataQuery'),
{
error: JSON.stringify(calldataError),
increaseCalldataQueryParams: JSON.stringify(increaseCalldataQueryParams),
},
)
} }
const { value: calculatedGasFee } = useTransactionGasFee(increase, !!actualGasFee) const { value: calculatedGasFee } = useTransactionGasFee(increase, !!actualGasFee)
......
...@@ -656,3 +656,12 @@ export function getDisplayedAmountsFromDependentAmount({ ...@@ -656,3 +656,12 @@ export function getDisplayedAmountsFromDependentAmount({
displayCurrencyAmounts: currencyAmounts, 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
}
// eslint-disable-next-line no-restricted-imports // eslint-disable-next-line no-restricted-imports
import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb'
import { useV3OrV4PositionDerivedInfo } from 'components/Liquidity/hooks' 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 { useRemoveLiquidityModalContext } from 'components/RemoveLiquidity/RemoveLiquidityModalContext'
import { RemoveLiquidityTxInfo } from 'components/RemoveLiquidity/RemoveLiquidityTxContext' import { RemoveLiquidityTxInfo } from 'components/RemoveLiquidity/RemoveLiquidityTxContext'
import { ZERO_ADDRESS } from 'constants/misc' import { ZERO_ADDRESS } from 'constants/misc'
...@@ -56,17 +56,18 @@ export function useRemoveLiquidityTxAndGasInfo({ account }: { account?: string } ...@@ -56,17 +56,18 @@ export function useRemoveLiquidityTxAndGasInfo({ account }: { account?: string }
} = useCheckLpApprovalQuery({ } = useCheckLpApprovalQuery({
params: v2LpTokenApprovalQueryParams, params: v2LpTokenApprovalQueryParams,
staleTime: 5 * ONE_SECOND_MS, staleTime: 5 * ONE_SECOND_MS,
enabled: Boolean(v2LpTokenApprovalQueryParams),
}) })
if (approvalError) { if (approvalError) {
logger.info( logger.info(
'RemoveLiquidityTxAndGasInfo', 'RemoveLiquidityTxAndGasInfo',
'RemoveLiquidityTxAndGasInfo', 'RemoveLiquidityTxAndGasInfo',
'CheckLpApprovalQuery', parseErrorMessageTitle(approvalError, 'unkown CheckLpApprovalQuery'),
JSON.stringify({ {
error: approvalError, error: JSON.stringify(approvalError),
v2LpTokenApprovalQueryParams, v2LpTokenApprovalQueryParams: JSON.stringify(v2LpTokenApprovalQueryParams),
}), },
) )
} }
...@@ -141,19 +142,20 @@ export function useRemoveLiquidityTxAndGasInfo({ account }: { account?: string } ...@@ -141,19 +142,20 @@ export function useRemoveLiquidityTxAndGasInfo({ account }: { account?: string }
deadlineInMinutes: customDeadline, deadlineInMinutes: customDeadline,
refetchInterval: 5 * ONE_SECOND_MS, refetchInterval: 5 * ONE_SECOND_MS,
enabled: enabled:
(!percentInvalid && !v2LpTokenApprovalQueryParams) || !!decreaseCalldataQueryParams &&
(!v2ApprovalLoading && !approvalError && Boolean(v2LpTokenApproval)), ((!percentInvalid && !v2LpTokenApprovalQueryParams) ||
(!v2ApprovalLoading && !approvalError && Boolean(v2LpTokenApproval))),
}) })
if (calldataError) { if (calldataError) {
logger.info( logger.info(
'RemoveLiquidityTxAndGasInfo', 'RemoveLiquidityTxAndGasInfo',
'RemoveLiquidityTxAndGasInfo', 'RemoveLiquidityTxAndGasInfo',
'DecreaseLpPositionCalldataQuery', parseErrorMessageTitle(calldataError, 'DecreaseLpPositionCalldataQuery'),
JSON.stringify({ {
error: calldataError, error: JSON.stringify(calldataError),
decreaseCalldataQueryParams, decreaseCalldataQueryParams: JSON.stringify(decreaseCalldataQueryParams),
}), },
) )
} }
......
...@@ -3,6 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' ...@@ -3,6 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb'
import { Currency, CurrencyAmount } from '@uniswap/sdk-core' import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
import { useV3OrV4PositionDerivedInfo } from 'components/Liquidity/hooks' import { useV3OrV4PositionDerivedInfo } from 'components/Liquidity/hooks'
import { V3PositionInfo } from 'components/Liquidity/types' import { V3PositionInfo } from 'components/Liquidity/types'
import { parseErrorMessageTitle } from 'components/Liquidity/utils'
import { ZERO_ADDRESS } from 'constants/misc' import { ZERO_ADDRESS } from 'constants/misc'
import { useCreatePositionContext, usePriceRangeContext } from 'pages/Pool/Positions/create/CreatePositionContext' import { useCreatePositionContext, usePriceRangeContext } from 'pages/Pool/Positions/create/CreatePositionContext'
import { PropsWithChildren, createContext, useContext, useMemo } from 'react' import { PropsWithChildren, createContext, useContext, useMemo } from 'react'
...@@ -75,17 +76,18 @@ export function MigrateV3PositionTxContextProvider({ ...@@ -75,17 +76,18 @@ export function MigrateV3PositionTxContextProvider({
'x-universal-router-version': '2.0', 'x-universal-router-version': '2.0',
}, },
staleTime: 5 * ONE_SECOND_MS, staleTime: 5 * ONE_SECOND_MS,
enabled: Boolean(increaseLiquidityApprovalParams),
}) })
if (approvalError) { if (approvalError) {
logger.info( logger.info(
'MigrateV3LiquidityTxContext', 'MigrateV3LiquidityTxContext',
'MigrateV3LiquidityTxContext', 'MigrateV3LiquidityTxContext',
'CheckLpApprovalQuery', parseErrorMessageTitle(approvalError, 'unknown CheckLpApprovalQuery'),
JSON.stringify({ {
error: approvalError, error: JSON.stringify(approvalError),
increaseLiquidityApprovalParams, increaseLiquidityApprovalParams: JSON.stringify(increaseLiquidityApprovalParams),
}), },
) )
} }
...@@ -189,11 +191,11 @@ export function MigrateV3PositionTxContextProvider({ ...@@ -189,11 +191,11 @@ export function MigrateV3PositionTxContextProvider({
logger.info( logger.info(
'MigrateV3LiquidityTxContext', 'MigrateV3LiquidityTxContext',
'MigrateV3LiquidityTxContext', 'MigrateV3LiquidityTxContext',
'MigrateLpPositionCalldataQuery', parseErrorMessageTitle(migrateError, 'unknown MigrateLpPositionCalldataQuery'),
JSON.stringify({ {
error: migrateError, error: JSON.stringify(migrateError),
migrateCalldataQueryParams: JSON.stringify(migratePositionRequestArgs), migrateCalldataQueryParams: JSON.stringify(migratePositionRequestArgs),
}), },
) )
} }
......
...@@ -3,7 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb' ...@@ -3,7 +3,7 @@ import { ProtocolVersion } from '@uniswap/client-pools/dist/pools/v1/types_pb'
import { LoaderButton } from 'components/Button/LoaderButton' import { LoaderButton } from 'components/Button/LoaderButton'
import { getLPBaseAnalyticsProperties } from 'components/Liquidity/analytics' import { getLPBaseAnalyticsProperties } from 'components/Liquidity/analytics'
import { useModalLiquidityInitialState, useV3OrV4PositionDerivedInfo } from 'components/Liquidity/hooks' 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 { GetHelpHeader } from 'components/Modal/GetHelpHeader'
import { ZERO_ADDRESS } from 'constants/misc' import { ZERO_ADDRESS } from 'constants/misc'
import { useAccount } from 'hooks/useAccount' import { useAccount } from 'hooks/useAccount'
...@@ -112,18 +112,15 @@ export function ClaimFeeModal() { ...@@ -112,18 +112,15 @@ export function ClaimFeeModal() {
refetch, refetch,
} = useClaimLpFeesCalldataQuery({ } = useClaimLpFeesCalldataQuery({
params: claimLpFeesParams, params: claimLpFeesParams,
enabled: Boolean(claimLpFeesParams),
}) })
if (error) { // prevent logging of the empty error object for now since those are burying signals
logger.info( if (error && Object.keys(error).length > 0) {
'ClaimFeeModal', logger.info('ClaimFeeModal', 'ClaimFeeModal', parseErrorMessageTitle(error, 'unknown ClaimLPFeesCalldataQuery'), {
'ClaimFeeModal', error: JSON.stringify(error),
'ClaimLPFeesCalldataQuery', claimLpFeesParams: JSON.stringify(claimLpFeesParams),
JSON.stringify({ })
error,
claimLpFeesParams,
}),
)
} }
const txInfo = useMemo(() => { const txInfo = useMemo(() => {
......
import { FeeTierSearchModal } from 'components/Liquidity/FeeTierSearchModal' import { FeeTierSearchModal } from 'components/Liquidity/FeeTierSearchModal'
import { DepositState } from 'components/Liquidity/types' import { DepositState } from 'components/Liquidity/types'
import { parseErrorMessageTitle } from 'components/Liquidity/utils'
import { import {
CreatePositionContext, CreatePositionContext,
CreateTxContext, CreateTxContext,
...@@ -168,18 +169,18 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod ...@@ -168,18 +169,18 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod
} = useCheckLpApprovalQuery({ } = useCheckLpApprovalQuery({
params: addLiquidityApprovalParams, params: addLiquidityApprovalParams,
staleTime: 5 * ONE_SECOND_MS, staleTime: 5 * ONE_SECOND_MS,
enabled: !hasError, enabled: !!addLiquidityApprovalParams && !hasError,
}) })
if (approvalError) { if (approvalError) {
logger.info( logger.info(
'CreateTxContextProvider', 'CreateTxContextProvider',
'CreateTxContextProvider', 'CreateTxContextProvider',
'CheckLpApprovalQuery', parseErrorMessageTitle(approvalError, 'unknown CheckLpApprovalQuery'),
JSON.stringify({ {
error: approvalError, error: JSON.stringify(approvalError),
addLiquidityApprovalParams, addLiquidityApprovalParams: JSON.stringify(addLiquidityApprovalParams),
}), },
) )
} }
...@@ -221,18 +222,23 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod ...@@ -221,18 +222,23 @@ export function CreateTxContextProvider({ children }: { children: React.ReactNod
params: createCalldataQueryParams, params: createCalldataQueryParams,
deadlineInMinutes: swapSettings.customDeadline, deadlineInMinutes: swapSettings.customDeadline,
refetchInterval: 5 * ONE_SECOND_MS, refetchInterval: 5 * ONE_SECOND_MS,
enabled: !hasError && !approvalLoading && !approvalError && Boolean(approvalCalldata), enabled:
!hasError &&
!approvalLoading &&
!approvalError &&
Boolean(approvalCalldata) &&
Boolean(createCalldataQueryParams),
}) })
if (createError) { if (createError) {
logger.info( logger.info(
'CreateTxContextProvider', 'CreateTxContextProvider',
'CreateTxContextProvider', 'CreateTxContextProvider',
'CreateLpPositionCalldataQuery', parseErrorMessageTitle(createError, 'unknown CreateLpPositionCalldataQuery'),
JSON.stringify({ {
error: createError, error: JSON.stringify(createError),
createCalldataQueryParams, createCalldataQueryParams: JSON.stringify(createCalldataQueryParams),
}), },
) )
} }
......
...@@ -15,10 +15,9 @@ export function useCheckLpApprovalQuery({ ...@@ -15,10 +15,9 @@ export function useCheckLpApprovalQuery({
return useQuery<CheckApprovalLPResponse>({ return useQuery<CheckApprovalLPResponse>({
queryKey, queryKey,
enabled: !!params,
queryFn: async () => { queryFn: async () => {
if (!params) { if (!params) {
throw new Error('Params are required') throw { name: 'Params are required' }
} }
return await checkLpApproval(params, headers) return await checkLpApproval(params, headers)
}, },
......
...@@ -12,10 +12,9 @@ export function useClaimLpFeesCalldataQuery({ ...@@ -12,10 +12,9 @@ export function useClaimLpFeesCalldataQuery({
return useQuery<ClaimLPFeesResponse>({ return useQuery<ClaimLPFeesResponse>({
queryKey, queryKey,
enabled: !!params,
queryFn: async () => { queryFn: async () => {
if (!params) { if (!params) {
throw new Error('Params are required') throw { name: 'Params are required' }
} }
return await claimLpFees(params) return await claimLpFees(params)
}, },
......
...@@ -18,10 +18,9 @@ export function useCreateLpPositionCalldataQuery({ ...@@ -18,10 +18,9 @@ export function useCreateLpPositionCalldataQuery({
return useQuery<CreateLPPositionResponse>({ return useQuery<CreateLPPositionResponse>({
queryKey, queryKey,
enabled: !!params,
queryFn: async () => { queryFn: async () => {
if (!params) { if (!params) {
throw new Error('Params are required') throw { name: 'Params are required' }
} }
return await createLpPosition(paramsWithDeadline) return await createLpPosition(paramsWithDeadline)
}, },
......
...@@ -19,10 +19,9 @@ export function useDecreaseLpPositionCalldataQuery({ ...@@ -19,10 +19,9 @@ export function useDecreaseLpPositionCalldataQuery({
return useQuery<DecreaseLPPositionResponse>({ return useQuery<DecreaseLPPositionResponse>({
queryKey, queryKey,
enabled: !!params,
queryFn: async () => { queryFn: async () => {
if (!params) { if (!params) {
throw new Error('Params are required') throw { name: 'Params are required' }
} }
return await decreaseLpPosition(paramsWithDeadline) return await decreaseLpPosition(paramsWithDeadline)
}, },
......
...@@ -19,10 +19,9 @@ export function useIncreaseLpPositionCalldataQuery({ ...@@ -19,10 +19,9 @@ export function useIncreaseLpPositionCalldataQuery({
const paramsWithDeadline = { ...params, deadline } const paramsWithDeadline = { ...params, deadline }
return useQuery<IncreaseLPPositionResponse>({ return useQuery<IncreaseLPPositionResponse>({
queryKey, queryKey,
enabled: !!params,
queryFn: async () => { queryFn: async () => {
if (!params) { if (!params) {
throw new Error('Params are required') throw { name: 'Params are required' }
} }
return await increaseLpPosition(paramsWithDeadline) return await increaseLpPosition(paramsWithDeadline)
}, },
......
...@@ -15,10 +15,9 @@ export function useMigrateV3LpPositionCalldataQuery({ ...@@ -15,10 +15,9 @@ export function useMigrateV3LpPositionCalldataQuery({
return useQuery<MigrateLPPositionResponse>({ return useQuery<MigrateLPPositionResponse>({
queryKey, queryKey,
enabled: !!params,
queryFn: async () => { queryFn: async () => {
if (!params) { if (!params) {
throw new Error('Params are required') throw { name: 'Params are required' }
} }
return await migrateLpPosition(params) return await migrateLpPosition(params)
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment