Skip to content

Commit 29c499f

Browse files
ci(release): publish latest release
1 parent 0e24f03 commit 29c499f

File tree

631 files changed

+4916
-21530
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

631 files changed

+4916
-21530
lines changed

CODEOWNERS

-1
This file was deleted.

RELEASE

+7-21
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,10 @@
1-
IPFS hash of the deployment:
2-
- CIDv0: `QmZNKQNeHGqEJfGMyWbH1zYCgs8pazXe2FajiS4KVzxfPL`
3-
- CIDv1: `bafybeifd3xryjkpe4lqgqfonwz7pdfzjtdlspryilb44sn7utv26mpxab4`
1+
We are back with some new updates! Here’s the latest:
42

5-
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
6-
7-
You can also access the Uniswap Interface from an IPFS gateway.
8-
**BEWARE**: The Uniswap interface uses [`localStorage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) to remember your settings, such as which tokens you have imported.
9-
**You should always use an IPFS gateway that enforces origin separation**, or our hosted deployment of the latest release at [app.uniswap.org](https://app.uniswap.org).
10-
Your Uniswap settings are never remembered across different URLs.
11-
12-
IPFS gateways:
13-
- https://bafybeifd3xryjkpe4lqgqfonwz7pdfzjtdlspryilb44sn7utv26mpxab4.ipfs.dweb.link/
14-
- https://bafybeifd3xryjkpe4lqgqfonwz7pdfzjtdlspryilb44sn7utv26mpxab4.ipfs.cf-ipfs.com/
15-
- [ipfs://QmZNKQNeHGqEJfGMyWbH1zYCgs8pazXe2FajiS4KVzxfPL/](ipfs://QmZNKQNeHGqEJfGMyWbH1zYCgs8pazXe2FajiS4KVzxfPL/)
16-
17-
### 5.49.2 (2024-10-03)
18-
19-
20-
### Bug Fixes
21-
22-
* **web:** dont respect url flag overrides on prod - prod (#12548) a2b2517
3+
Report Spam NFTs - You can now report spam NFTs and hide them from your feed and activity.
234

5+
Other changes:
246

7+
- Added explainers for hidden tokens, popular tokens, and hidden NFTs
8+
- Removed activity feed items related to any hidden NFTs
9+
- More optimized keyboard functionality across the app
10+
- Various bug fixes and performance improvements

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web/5.49.2
1+
mobile/1.36

apps/extension/jest-setup.js

-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { AppearanceSettingType } from 'wallet/src/features/appearance/slice'
55
import { TextEncoder, TextDecoder } from 'util'
66
import { mockSharedPersistQueryClientProvider } from 'uniswap/src/test/mocks/mockSharedPersistQueryClientProvider'
77
import { mockUIAssets } from 'ui/src/test/mocks/mockUIAssets'
8-
import { mockLocalizationContext } from 'uniswap/src/test/mocks/locale'
98

109
process.env.IS_UNISWAP_EXTENSION = true
1110

@@ -73,8 +72,6 @@ jest.mock('wallet/src/features/appearance/hooks', () => {
7372
}
7473
})
7574

76-
jest.mock('uniswap/src/features/language/LocalizationContext', () => mockLocalizationContext({}))
77-
7875
jest.mock('uniswap/src/data/apiClients/SharedPersistQueryClientProvider', () => mockSharedPersistQueryClientProvider)
7976

8077
mockUIAssets()

apps/extension/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
"@svgr/webpack": "8.0.1",
1414
"@tamagui/core": "1.108.4",
1515
"@types/uuid": "9.0.1",
16-
"@uniswap/analytics-events": "2.37.0",
17-
"@uniswap/uniswapx-sdk": "^2.1.0-beta.14",
16+
"@uniswap/analytics-events": "2.36.0",
17+
"@uniswap/uniswapx-sdk": "^2.1.0-beta.8",
1818
"@uniswap/universal-router-sdk": "2.2.0",
1919
"@uniswap/v3-sdk": "3.14.0",
2020
"dotenv-webpack": "8.0.1",

apps/extension/src/app/OnboardingApp.tsx

+6-16
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { PersistGate } from 'redux-persist/integration/react'
99
import { ExtensionStatsigProvider } from 'src/app/StatsigProvider'
1010
import { GraphqlProvider } from 'src/app/apollo'
1111
import { ErrorElement } from 'src/app/components/ErrorElement'
12-
import { ClaimUnitagScreen } from 'src/app/features/onboarding/ClaimUnitagScreen'
1312
import { Complete } from 'src/app/features/onboarding/Complete'
1413
import {
1514
CreateOnboardingSteps,
@@ -56,14 +55,6 @@ const unsupportedRoute: RouteObject = {
5655
element: <UnsupportedBrowserScreen />,
5756
}
5857

59-
const createSteps = {
60-
[CreateOnboardingSteps.Password]: <PasswordCreate />,
61-
[CreateOnboardingSteps.ViewMnemonic]: <ViewMnemonic />,
62-
[CreateOnboardingSteps.TestMnemonic]: <TestMnemonic />,
63-
[CreateOnboardingSteps.Naming]: <NameWallet />,
64-
[CreateOnboardingSteps.Complete]: <Complete flow={ExtensionOnboardingFlow.New} />,
65-
}
66-
6758
const allRoutes = [
6859
{
6960
path: '',
@@ -75,16 +66,15 @@ const allRoutes = [
7566
},
7667
{
7768
path: OnboardingRoutes.Create,
78-
element: <OnboardingStepsProvider key={OnboardingRoutes.Create} steps={createSteps} />,
79-
},
80-
{
81-
path: OnboardingRoutes.Claim,
8269
element: (
8370
<OnboardingStepsProvider
84-
key={OnboardingRoutes.Claim}
71+
key={OnboardingRoutes.Create}
8572
steps={{
86-
[CreateOnboardingSteps.ClaimUnitag]: <ClaimUnitagScreen />,
87-
...createSteps,
73+
[CreateOnboardingSteps.Password]: <PasswordCreate />,
74+
[CreateOnboardingSteps.ViewMnemonic]: <ViewMnemonic />,
75+
[CreateOnboardingSteps.TestMnemonic]: <TestMnemonic />,
76+
[CreateOnboardingSteps.Naming]: <NameWallet />,
77+
[CreateOnboardingSteps.Complete]: <Complete flow={ExtensionOnboardingFlow.New} />,
8878
}}
8979
/>
9080
),

apps/extension/src/app/features/accounts/AccountItem.tsx

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { useDispatch } from 'react-redux'
55
import { EditLabelModal } from 'src/app/features/accounts/EditLabelModal'
66
import { removeAllDappConnectionsForAccount } from 'src/app/features/dapp/actions'
77
import { ContextMenu, Flex, MenuContentItem, Text, TouchableArea } from 'ui/src'
8-
import { CopySheets, Edit, Ellipsis, TrashFilled } from 'ui/src/components/icons'
8+
import { CopySheets, Edit, TrashFilled, TripleDots } from 'ui/src/components/icons'
99
import { iconSizes } from 'ui/src/theme'
1010
import { WarningModal } from 'uniswap/src/components/modals/WarningModal/WarningModal'
1111
import { WarningSeverity } from 'uniswap/src/components/modals/WarningModal/types'
@@ -131,15 +131,15 @@ export function AccountItem({ address, onAccountSelect, balanceUSD }: AccountIte
131131
caption={t('account.recoveryPhrase.remove.mnemonic.description', {
132132
walletNames: [activeAccountDisplayName?.name ?? ''],
133133
})}
134-
rejectText={t('common.button.cancel')}
135-
acknowledgeText={t('common.button.continue')}
134+
closeText={t('common.button.cancel')}
135+
confirmText={t('common.button.continue')}
136136
icon={<TrashFilled color="$statusCritical" size="$icon.24" strokeWidth="$spacing1" />}
137137
isOpen={showRemoveWalletModal}
138138
modalName={ModalName.RemoveWallet}
139139
severity={WarningSeverity.High}
140140
title={t('account.wallet.remove.title', { name: displayName?.name ?? '' })}
141141
onClose={() => setShowRemoveWalletModal(false)}
142-
onAcknowledge={onRemoveWallet}
142+
onConfirm={onRemoveWallet}
143143
/>
144144
<EditLabelModal address={address} isOpen={showEditLabelModal} onClose={() => setShowEditLabelModal(false)} />
145145
<TouchableArea
@@ -179,7 +179,7 @@ export function AccountItem({ address, onAccountSelect, balanceUSD }: AccountIte
179179
opacity={0}
180180
p="$spacing4"
181181
>
182-
<Ellipsis color="$neutral2" size="$icon.16" />
182+
<TripleDots color="$neutral2" size="$icon.16" />
183183
</Flex>
184184
</ContextMenu>
185185
</Flex>

apps/extension/src/app/features/accounts/AccountSwitcherScreen.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,15 @@ export function AccountSwitcherScreen(): JSX.Element {
166166
/>
167167
<WarningModal
168168
caption={t('account.recoveryPhrase.remove.import.description')}
169-
rejectText={t('common.button.cancel')}
170-
acknowledgeText={t('common.button.continue')}
169+
closeText={t('common.button.cancel')}
170+
confirmText={t('common.button.continue')}
171171
icon={<WalletFilled color="$statusCritical" size="$icon.24" />}
172172
isOpen={showRemoveWalletModal}
173173
modalName={ModalName.RemoveWallet}
174174
severity={WarningSeverity.High}
175175
title={t('account.wallet.button.import')}
176176
onClose={() => setShowRemoveWalletModal(false)}
177-
onAcknowledge={onNavigateToRemoveWallet}
177+
onConfirm={onNavigateToRemoveWallet}
178178
/>
179179
<CreateWalletModal
180180
isOpen={showCreateWalletModal}

apps/extension/src/app/features/dapp/store.ts

+20-18
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { cloneDeep } from '@apollo/client/utilities'
21
import EventEmitter from 'eventemitter3'
32
import { getOrderedConnectedAddresses, isConnectedAccount } from 'src/app/features/dapp/utils'
43
import { UniverseChainId, WalletChainId } from 'uniswap/src/types/chains'
@@ -224,28 +223,31 @@ function removeAccountDappConnections(account: Account): void {
224223
* @returns the updated state
225224
*/
226225
function removeDappConnectionHelper(initialState: DappState, dappUrl: string, account?: Account): DappState {
227-
const newState = cloneDeep(initialState)
228-
const dappInfo = newState[dappUrl]
226+
const dappUrlState = initialState[dappUrl]
229227

230-
if (!dappInfo) {
228+
if (!dappUrlState) {
231229
return initialState
232230
}
233231

234-
dappInfo.connectedAccounts = dappInfo.connectedAccounts.filter(
235-
(existingAccount) => existingAccount.address !== account?.address,
236-
)
237-
238-
const nextConnectedAccount = dappInfo.connectedAccounts[0]
239-
240-
if (!nextConnectedAccount || !account) {
241-
delete newState[dappUrl]
242-
return newState
243-
}
244-
245-
if (dappInfo.activeConnectedAddress === account.address) {
246-
dappInfo.activeConnectedAddress = nextConnectedAccount.address
232+
const updatedAccounts = account
233+
? dappUrlState.connectedAccounts?.filter((existingAccount) => existingAccount.address !== account.address)
234+
: []
235+
236+
const activeConnected = updatedAccounts[0]
237+
if (activeConnected) {
238+
return {
239+
...initialState,
240+
[dappUrl]: {
241+
...dappUrlState,
242+
connectedAccounts: updatedAccounts,
243+
activeConnectedAddress: activeConnected.address,
244+
},
245+
}
246+
} else {
247+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
248+
const { [dappUrl]: _, ...restState } = initialState
249+
return restState
247250
}
248-
return newState
249251
}
250252

251253
function removeAllDappConnections(): void {

apps/extension/src/app/features/dappRequests/DappRequestContent.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -237,14 +237,14 @@ export function DappRequestFooter({
237237
px="$spacing8"
238238
/>
239239
<Flex row gap="$spacing12" pt="$spacing8">
240-
<Button flex={1} flexBasis={1} size="medium" theme="secondary" onPress={handleOnCancel}>
240+
<Button flex={1} flexBasis={1} size="small" theme="secondary" onPress={handleOnCancel}>
241241
{t('common.button.cancel')}
242242
</Button>
243243
<Button
244244
disabled={isConfirmDisabled}
245245
flex={1}
246246
flexBasis={1}
247-
size="medium"
247+
size="small"
248248
theme="primary"
249249
onPress={handleOnConfirm}
250250
>

apps/extension/src/app/features/dappRequests/accounts.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ export function* saveAccount({ url, favIconUrl }: SenderTabInfo) {
8888
const dappInfo = yield* call(dappStore.getDappInfo, dappUrl)
8989

9090
if (!dappUrl || !activeAccount) {
91-
return undefined
91+
return
9292
}
9393

9494
yield* call(saveDappConnection, dappUrl, activeAccount, favIconUrl)

apps/extension/src/app/features/dappRequests/requestContent/EthSend/Approve/ApproveRequestContent.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,11 @@ export function ApproveRequestContent({
6969
const { parsedTransactionData } = useNoYoloParser(dappRequest.transaction, activeChain)
7070

7171
// To detect a revoke, both the transaction value and the parsed arg amount value must be zero
72-
const isArgAmountZero = parsedTransactionData?.args.some(
73-
(arg) => typeof arg === 'object' && arg._hex && BigNumber.from(arg._hex).isZero(),
74-
)
72+
const isArgAmountZero = parsedTransactionData?.args.some((arg) => {
73+
if (typeof arg === 'object' && arg._hex) {
74+
return BigNumber.from(arg._hex).isZero()
75+
}
76+
})
7577
const isRevoke = dappRequest.transaction.value === '0x0' && isArgAmountZero
7678

7779
const tokenInfo = useDappRequestTokenRecipientInfo(dappRequest, dappUrl)

apps/extension/src/app/features/dappRequests/requestContent/SignTypeData/SignTypedDataRequestContent.tsx

-2
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,6 @@ export function SignTypedDataRequestContent({ dappRequest }: SignTypedDataReques
8888
</Flex>
8989
))
9090
}
91-
92-
return undefined
9391
}
9492

9593
return (

apps/extension/src/app/features/dappRequests/utils.ts

-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ function parseUrl(url?: string): URL | undefined {
1212
tags: { file: 'dappRequests/utils', function: 'extractBaseUrl' },
1313
extra: { url },
1414
})
15-
return undefined
1615
}
1716
}
1817

apps/extension/src/app/features/home/HomeScreen.tsx

-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { NftsTab } from 'src/app/components/tabs/NftsTab'
88
import { PortfolioActionButtons } from 'src/app/features/home/PortfolioActionButtons'
99
import { PortfolioHeader } from 'src/app/features/home/PortfolioHeader'
1010
import { TokenBalanceList } from 'src/app/features/home/TokenBalanceList'
11-
import { HomeIntroCardStack } from 'src/app/features/home/introCards/HomeIntroCardStack'
1211
import { PinReminder } from 'src/app/features/onboarding/PinReminder'
1312
import { selectAlertsState } from 'src/app/features/onboarding/alerts/selectors'
1413
import { AlertName, closeAlert } from 'src/app/features/onboarding/alerts/slice'
@@ -130,8 +129,6 @@ export const HomeScreen = memo(function _HomeScreen(): JSX.Element {
130129

131130
<PortfolioActionButtons />
132131

133-
<HomeIntroCardStack />
134-
135132
<Flex flex={1} width="100%">
136133
<Flex row gap="$spacing16" px="$spacing4" py="$spacing8">
137134
<TabButton isActive={selectedTab === HomeTabs.Tokens} onPress={() => setSelectedTab(HomeTabs.Tokens)}>

apps/extension/src/app/features/home/TokenBalanceList.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ const TokenBalanceItemRow = memo(function TokenBalanceItemRow({ item }: { item:
161161
}}
162162
/>
163163
{hiddenTokensExpanded && (
164-
<Flex>
164+
<Flex mx="$spacing12">
165165
<InformationBanner infoText={t('hidden.tokens.info.banner.text')} onPress={handlePressToken} />
166166
</Flex>
167167
)}

apps/extension/src/app/features/home/introCards/HomeIntroCardStack.tsx

-20
This file was deleted.

apps/extension/src/app/features/onboarding/ClaimUnitagScreen.tsx

-60
This file was deleted.

apps/extension/src/app/features/onboarding/OnboardingScreen.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function OnboardingScreen(props: OnboardingScreenProps): null {
77

88
useLayoutEffect(() => {
99
if (!context) {
10-
return undefined
10+
return
1111
}
1212
context.setOnboardingScreen(props)
1313
return () => {

0 commit comments

Comments
 (0)