ci(release): publish latest release

parent 6a7a7ef7
IPFS hash of the deployment: IPFS hash of the deployment:
- CIDv0: `QmeQNaiwpcq1CouKoDNgFD67b4rcw5YuLs3DSG1t5DLBxr` - CIDv0: `QmYLUSmyP2FahHkscj7gQbA43gJY3PQ7gekdk8Tt3yfrVq`
- CIDv1: `bafybeihov4kdcqzqfzh4p4n7o7o7z5p5xs3sdle6gc7zbfymyncoz24ma4` - CIDv1: `bafybeieurfbwxnagisdo3rash52dwiew7ivubnbpig7sy6ub4d3tjfr73q`
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,71 +10,14 @@ You can also access the Uniswap Interface from an IPFS gateway. ...@@ -10,71 +10,14 @@ 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://bafybeihov4kdcqzqfzh4p4n7o7o7z5p5xs3sdle6gc7zbfymyncoz24ma4.ipfs.dweb.link/ - https://bafybeieurfbwxnagisdo3rash52dwiew7ivubnbpig7sy6ub4d3tjfr73q.ipfs.dweb.link/
- [ipfs://QmeQNaiwpcq1CouKoDNgFD67b4rcw5YuLs3DSG1t5DLBxr/](ipfs://QmeQNaiwpcq1CouKoDNgFD67b4rcw5YuLs3DSG1t5DLBxr/) - [ipfs://QmYLUSmyP2FahHkscj7gQbA43gJY3PQ7gekdk8Tt3yfrVq/](ipfs://QmYLUSmyP2FahHkscj7gQbA43gJY3PQ7gekdk8Tt3yfrVq/)
## 5.87.0 (2025-05-29) ### 5.87.1 (2025-05-29)
### Features
* **web:** change how we navigate to new TDP when tokens change (#20088) 3c515b3
* **web:** clear text on search select (#19957) 519d18d
* **web:** fiat offramp (#19241) 1654f80
* **web:** fix language around swapping with passkey (#19805) cf90f72
* **web:** react compiler on vite (#19825) fe989f5
* **web:** remove EW view passphrase (#19640) fdc36d5
* **web:** remove indicativeQuote endpoint in favor of quote w/ routingPreference.Fastest (#19982) c05ffb7
* **web:** reworked connected no positions page (#20000) af0bf59
* **web:** reworked disconnected your positions page (#19999) 3e56bb9
* **web:** vite CSP injection (#19836) 7e16a6a
### Bug Fixes ### Bug Fixes
* **web:** [tdp] sort other chain balances (#20063) d032e9d * **web:** fix token warning modal plural crash (#20340) 0adb22e
* **web:** add submitting state to send form review modal (#20049) 112c892
* **web:** bug in send form when sending Celo USDC (#20132) d7e717c
* **web:** debugging csp error in production (#20058) 083c86c
* **web:** fallback to currency info on testnet (#20120) 3ec79b7
* **web:** handle 5792 v1 spec (#20097) 4df918c
* **web:** handle errors in parseRestPosition function (#20062) 5de5253
* **web:** make Range Bands indicator line more visible (#19891) 1aa70e1
* **web:** make web logging synchronous (#20013) aa9d96c
* **web:** pool index virtualized list dynamic heights (#20010) 70bee14
* **web:** prevent extreme outliers from breaking Pool price history chart (#19914) 8cc189f
* **web:** remove nfts from landing page (#20055) 28e7db8
* **web:** removeFormatNumberOrString from web formatting (#20034) f06fefd
* **web:** settings tooltips (#20059) 4406198
* **web:** update max button border (#19981) c769943
* **web:** update publishignore (#19864) ea21978
* **web:** update search bar hover behavior (#19994) a7481ad
* **web:** update unwrap TX on smart wallet accounts (#19954) 06f49bf
* **web:** use current year for footer copy (#19939) 7c30ca8
* **web:** vite storybook mock fix (#20012) e15b409
* **web:** wrapped token issues in pool details page (#20085) b129d2a
* **web): Revert "feat(web:** defer render of mini portfolio (#19442)" (#19958) 72ef6b8
### Continuous Integration
* **web:** update sitemaps a6ea37d
### Code Refactoring
* **web:** remove dialog component + content & customize limit error (#19911) 2331e94
* **web:** rename dialogv2 -> dialog (#19912) 9fd421e
### Tests
* **web:** fix Swap → should be able to swap token with FOT warning via TDP (#20024) 8fd03b5
* **web:** migrate some TDP tests to playwright (#20087) 7e831d1
* **web:** remove uniswapx cypress files (#19936) f057838
* **web:** uniswapx test - activity (#19933) fb5a4c2
* **web:** uniswapx test - cancel (#19929) 3502b54
* **web:** uniswapx test - expired (#19928) a5cc4c1
* **web:** uniswapx test (#19886) 32f8775
web/5.87.0 web/5.87.1
\ No newline at end of file \ No newline at end of file
...@@ -317,7 +317,7 @@ export default function TokenWarningModal({ ...@@ -317,7 +317,7 @@ export default function TokenWarningModal({
<AnimateTransition currentIndex={warningIndex} animationType={warningIndex === 0 ? 'forward' : 'backward'}> <AnimateTransition currentIndex={warningIndex} animationType={warningIndex === 0 ? 'forward' : 'backward'}>
<TokenWarningModalContent <TokenWarningModalContent
currencyInfo0={currencyInfo0} currencyInfo0={currencyInfo0}
currencyInfo1={currencyInfo1} currencyInfo1={combinedPlural ? currencyInfo1 : undefined}
isInfoOnlyWarning={!hasSecondWarning && isInfoOnlyWarning} // modal should be actionable if it is a 2-token warning (go to next token) isInfoOnlyWarning={!hasSecondWarning && isInfoOnlyWarning} // modal should be actionable if it is a 2-token warning (go to next token)
hasSecondWarning={hasSecondWarning} hasSecondWarning={hasSecondWarning}
shouldBeCombinedPlural={combinedPlural} shouldBeCombinedPlural={combinedPlural}
......
...@@ -16,6 +16,7 @@ import { ...@@ -16,6 +16,7 @@ import {
useModalSubtitleText, useModalSubtitleText,
useTokenWarningCardText, useTokenWarningCardText,
} from 'uniswap/src/features/tokens/safetyUtils' } from 'uniswap/src/features/tokens/safetyUtils'
import { logger } from 'utilities/src/logger/logger'
jest.mock('react-i18next', () => ({ jest.mock('react-i18next', () => ({
useTranslation: (): { t: (str: string) => string } => { useTranslation: (): { t: (str: string) => string } => {
...@@ -434,15 +435,20 @@ describe('useModalHeaderText', () => { ...@@ -434,15 +435,20 @@ describe('useModalHeaderText', () => {
expect(useModalHeaderText({ tokenProtectionWarning: undefined })).toBeNull() expect(useModalHeaderText({ tokenProtectionWarning: undefined })).toBeNull()
}) })
it('throws error when tokenSymbol1 provided without plural treatment', () => { it('logs error when tokenSymbol1 provided without plural treatment', () => {
expect(() => const mockLogger = jest.spyOn(logger, 'error')
useModalHeaderText({ useModalHeaderText({
tokenProtectionWarning: TokenProtectionWarning.FotLow, tokenProtectionWarning: TokenProtectionWarning.FotLow,
tokenSymbol0: 'ABC', tokenSymbol0: 'ABC',
tokenSymbol1: 'XYZ', tokenSymbol1: 'XYZ',
shouldHavePluralTreatment: false, shouldHavePluralTreatment: false,
}), })
).toThrow('Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked') expect(mockLogger).toHaveBeenCalledWith(
'Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked',
{
tags: { file: 'safetyUtils.ts', function: 'useModalHeaderText' },
},
)
}) })
it('returns correct text for blocked tokens with plural treatment', () => { it('returns correct text for blocked tokens with plural treatment', () => {
......
...@@ -7,6 +7,7 @@ import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/type ...@@ -7,6 +7,7 @@ import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/type
import { ProtectionResult } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks' import { ProtectionResult } from 'uniswap/src/data/graphql/uniswap-data-api/__generated__/types-and-hooks'
import { AttackType, CurrencyInfo, TokenList } from 'uniswap/src/features/dataApi/types' import { AttackType, CurrencyInfo, TokenList } from 'uniswap/src/features/dataApi/types'
import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext' import { useLocalizationContext } from 'uniswap/src/features/language/LocalizationContext'
import { logger } from 'utilities/src/logger/logger'
import { isInterface } from 'utilities/src/platform' import { isInterface } from 'utilities/src/platform'
export enum TokenProtectionWarning { export enum TokenProtectionWarning {
...@@ -215,7 +216,9 @@ export function useModalHeaderText({ ...@@ -215,7 +216,9 @@ export function useModalHeaderText({
return null return null
} }
if (!shouldHavePluralTreatment && tokenSymbol1) { if (!shouldHavePluralTreatment && tokenSymbol1) {
throw new Error('Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked') logger.error('Should only combine into one plural-languaged modal if BOTH are low or BOTH are blocked', {
tags: { file: 'safetyUtils.ts', function: 'useModalHeaderText' },
})
} }
switch (tokenProtectionWarning) { switch (tokenProtectionWarning) {
case TokenProtectionWarning.Blocked: case TokenProtectionWarning.Blocked:
......
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