Skip to content

Commit d69a638

Browse files
ci(release): publish latest release
1 parent 08d6805 commit d69a638

File tree

1,786 files changed

+20296
-24164
lines changed

Some content is hidden

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

1,786 files changed

+20296
-24164
lines changed

.depcheckrc

+14-16
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
ignores: [
22
# Dependencies that depcheck thinks are unused but are actually used
3-
'@graphql-codegen/*',
4-
'@commitlint/*',
5-
'i18next',
3+
"@graphql-codegen/*",
4+
"@commitlint/*",
5+
"i18next",
66
# Dependencies that depcheck thinks are missing but are actually present or never used
7-
'@yarnpkg/core',
8-
'@yarnpkg/cli',
9-
'clipanion',
10-
'@yarnpkg/fslib',
11-
'bufferutil',
12-
'utf-8-validate',
13-
'@yarnpkg/parsers',
14-
'@yarnpkg/plugin-git',
15-
'semver',
16-
'typanion',
17-
'turbo-ignore',
18-
'prettier',
19-
'prettier-plugin-organize-imports',
7+
"@yarnpkg/core",
8+
"@yarnpkg/cli",
9+
"clipanion",
10+
"@yarnpkg/fslib",
11+
"bufferutil",
12+
"utf-8-validate",
13+
"@yarnpkg/parsers",
14+
"@yarnpkg/plugin-git",
15+
"semver",
16+
"typanion",
17+
"turbo-ignore",
2018
]

.prettierignore

-49
This file was deleted.

.prettierrc

-9
This file was deleted.

CODEOWNERS

-1
This file was deleted.

RELEASE

+6-47
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,9 @@
1-
IPFS hash of the deployment:
2-
- CIDv0: `QmaNrzdiCZfezB1GYBZprZVoAh4KGsaZjzVH9qSmDCvZDv`
3-
- CIDv1: `bafybeifs3vfz27oqei35fu5fg6pfgzz3eacp3rdyhg7lvm5mp63iiauomu`
1+
Expanded network support — we now support ZKsync!
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://bafybeifs3vfz27oqei35fu5fg6pfgzz3eacp3rdyhg7lvm5mp63iiauomu.ipfs.dweb.link/
14-
- https://bafybeifs3vfz27oqei35fu5fg6pfgzz3eacp3rdyhg7lvm5mp63iiauomu.ipfs.cf-ipfs.com/
15-
- [ipfs://QmaNrzdiCZfezB1GYBZprZVoAh4KGsaZjzVH9qSmDCvZDv/](ipfs://QmaNrzdiCZfezB1GYBZprZVoAh4KGsaZjzVH9qSmDCvZDv/)
16-
17-
## 5.39.0 (2024-07-10)
18-
19-
20-
### Features
21-
22-
* **web:** [ext-gtm] make drawer a modal when uni extension is installed (#9560) 9f17d08
23-
* **web:** [ext-gtm] remove extra miniport content when extension is connected (#9678) e78e6d8
24-
* **web:** activity Row for FOR transactions (#9874) cea60c1
25-
* **web:** add error state for FOR connection modal (#9597) 5bd5da8
26-
* **web:** deeplinks for extension (#9782) 9c8c5bf
27-
* **web:** empty wallet state (#9641) 67e82cc
28-
* **web:** fiat on ramp design polish (#9860) 40ba8bc
29-
* **web:** FOR transaction status polling (#9793) 147db24
30-
* **web:** open FOR widget in onClick (#9826) 5658b80
31-
* **web:** redux slice for FOR transactions (#9575) 5985d7c
32-
* **web:** reorganize fiat on ramp components (incl. snapshots) (#9625) 60d8ebe
33-
34-
35-
### Bug Fixes
36-
37-
* **web:** avoid datadog duplicate logs and slowdowns in web test (#9626) 2031800
38-
* **web:** fix incorrect isToken check (#9765) 7ef1d18
39-
* **web:** fix rive not loading in prod (#9856) 681219d
40-
* **web:** memoize FOR transactions to avoid rerenders - hotfix staging (#9917) e4d272e
41-
* **web:** Show chart error state if priceHistory is an empty array [staging] (#9926) 4dc66f3
42-
* **web:** use sentence case miniP (#9759) 79ce461
43-
* **web:** useSyncChainQuery for input currencies without chain param (#9521) 565c985
44-
45-
46-
### Continuous Integration
47-
48-
* **web:** update sitemaps fd342d7
3+
Better multi-network warnings — provides clear warnings when a user doesn’t have enough base asset on a network to pay gas and complete a transaction.
494

5+
Other changes:
506

7+
- Onboarding improvements
8+
- Better handling of larger numbers
9+
- Various bug fixes and performance improvements

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web/5.39.0
1+
mobile/1.30

apps/mobile/.prettierignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ios
2+
android
3+
.eslintrc.js

apps/mobile/README.md

-9
Original file line numberDiff line numberDiff line change
@@ -190,15 +190,6 @@ Resolve this issue by navigating to the `ios/` directory and running `pod update
190190
- `Build target hermes-engine: Command PhaseScriptExecution failed with a nonzero exit code`
191191
Node isn't being located correctly during the build phase. Run `which node` and copy the resulting path into `.xcode.env.local`. More context [here](https://github.com/facebook/react-native/issues/42221).
192192

193-
- `CocoaPods could not find compatible versions for pod "hermes-engine"`
194-
The following commands can help you fix these types of errors:
195-
196-
`cd ios && pod install --repo-update`
197-
`cd ios && pod repo update`
198-
`cd ios && pod update hermes-engine --no-repo-update`
199-
200-
Context: https://uniswapteam.slack.com/archives/C02GYG8TU12/p1692640189802989?thread_ts=1692635970.952869&cid=C02GYG8TU12
201-
202193
### Common fixes
203194

204195
If something isn’t working the way it should or you’re getting a weird error when trying to run the app, try the following:

apps/mobile/__mocks__/@react-navigation/native.js

-30
This file was deleted.

apps/mobile/__mocks__/@shopify/react-native-skia.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ import { View, ViewProps } from 'react-native'
33

44
// Source: https://github.com/Shopify/react-native-skia/issues/548#issuecomment-1157609472
55

6-
const PlainView = ({ children, ...props }: PropsWithChildren<unknown>): React.CElement<ViewProps, View> => {
6+
const PlainView = ({
7+
children,
8+
...props
9+
}: PropsWithChildren<unknown>): React.CElement<ViewProps, View> => {
710
return React.createElement(View, props, children)
811
}
912
const noop = (): null => null

apps/mobile/__mocks__/react-native-context-menu-view.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import React, { PropsWithChildren } from 'react'
22
import { View, ViewProps } from 'react-native'
33

4-
const PlainView = ({ children, ...props }: PropsWithChildren<unknown>): React.CElement<ViewProps, View> => {
4+
const PlainView = ({
5+
children,
6+
...props
7+
}: PropsWithChildren<unknown>): React.CElement<ViewProps, View> => {
58
return React.createElement(View, props, children)
69
}
710

apps/mobile/__mocks__/react-native-fast-image.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
import React, { PropsWithChildren } from 'react'
22
import { Image, ImageProps } from 'react-native'
33

4-
const PlainImage = ({ children, ...props }: PropsWithChildren<ImageProps>): React.CElement<ImageProps, Image> => {
4+
const PlainImage = ({
5+
children,
6+
...props
7+
}: PropsWithChildren<ImageProps>): React.CElement<ImageProps, Image> => {
58
return React.createElement(Image, props, children)
69
}
710

apps/mobile/android/app/build.gradle

+3-3
Original file line numberDiff line numberDiff line change
@@ -131,17 +131,17 @@ android {
131131
dev {
132132
isDefault(true)
133133
applicationIdSuffix ".dev"
134-
versionName "1.31"
134+
versionName "1.30"
135135
dimension "variant"
136136
}
137137
beta {
138138
applicationIdSuffix ".beta"
139-
versionName "1.31"
139+
versionName "1.30"
140140
dimension "variant"
141141
}
142142
prod {
143143
dimension "variant"
144-
versionName "1.31"
144+
versionName "1.30"
145145
}
146146
}
147147

apps/mobile/e2e/Onboarding.e2e.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { CreateNewWallet } from 'e2e/usecases/onboarding/CreateNewWallet'
2+
import { ImportWallet } from 'e2e/usecases/onboarding/ImportWallet'
23
import { WatchWallet } from 'e2e/usecases/onboarding/WatchWallet'
34

45
describe('Onboarding', () => {
@@ -13,7 +14,5 @@ describe('Onboarding', () => {
1314

1415
it('creates a new wallet', CreateNewWallet)
1516
it('watches wallet', WatchWallet)
16-
// TODO: find the way to test native input
17-
// eslint-disable-next-line jest/no-commented-out-tests
18-
// it('imports a testing wallet using recovery phrase', ImportWallet)
17+
it('imports a testing wallet using recovery phrase', ImportWallet)
1918
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { by, element, expect } from 'detox'
2+
import { TestWallet } from 'e2e/utils/fixtures'
3+
import { ElementName } from 'uniswap/src/features/telemetry/constants'
4+
5+
export function CreateNewWallet(): void {
6+
it('creates a new wallet', async () => {
7+
// Selects "Create a new wallet" option on the landing screen
8+
await element(by.id(ElementName.CreateAccount)).tap()
9+
10+
// Skips unitag flow
11+
await element(by.id(ElementName.Skip)).tap()
12+
13+
// Taps "Let's keep it safe" on QRAnimation screen
14+
await element(by.id(ElementName.Next)).tap()
15+
16+
// Check is both manual and cloud backup options are available on BackupScreen
17+
await expect(element(by.id(ElementName.AddCloudBackup))).toBeVisible()
18+
await expect(element(by.id(ElementName.AddManualBackup))).toBeVisible()
19+
20+
// Picks "Manual backup" option
21+
await element(by.id(ElementName.AddManualBackup)).tap()
22+
23+
// Checks if ManualBackupScreen warning displays and taps "I'm ready" button
24+
await expect(element(by.id(ElementName.Confirm))).toBeVisible()
25+
await element(by.id(ElementName.Confirm)).tap()
26+
27+
// Taps continue on ManualBackupScreen
28+
await element(by.id(ElementName.Next)).tap()
29+
30+
// Taps continue on manual backup confirmation screen. It is replaced by mock because detox
31+
// can't interact with native screens
32+
await element(by.id(ElementName.Continue)).tap()
33+
34+
// Skips notification setup by tapping "Maybe later" button
35+
await element(by.id(ElementName.Skip)).tap()
36+
37+
// Skips biometrics setup by tapping "Maybe later" button
38+
await element(by.id(ElementName.Skip)).tap()
39+
40+
// Confirms by tapping "Skip" on warning modal
41+
await element(by.id(ElementName.Confirm)).tap()
42+
43+
// Confirms if user successfuly finished create new wallet flow by checking if provided wallet name is
44+
// displayed and other
45+
await expect(element(by.text(TestWallet.name))).toBeVisible()
46+
await expect(element(by.id(ElementName.Swap))).toBeVisible()
47+
await expect(element(by.id(ElementName.SearchTokensAndWallets))).toBeVisible()
48+
})
49+
}
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,47 @@
11
import { by, element, expect } from 'detox'
22
import { TestWallet } from 'e2e/utils/fixtures'
3-
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
3+
import { ElementName } from 'uniswap/src/features/telemetry/constants'
44

55
export async function CreateNewWallet(): Promise<void> {
66
// Selects "Create a new wallet" option on the landing screen
7-
await element(by.id(TestID.CreateAccount)).tap()
7+
await element(by.id(ElementName.CreateAccount)).tap()
88

99
// Skips unitag flow
10-
await element(by.id(TestID.Skip)).tap()
10+
await element(by.id(ElementName.Skip)).tap()
1111

1212
// Taps "Let's keep it safe" on QRAnimation screen
13-
await element(by.id(TestID.Next)).tap()
13+
await element(by.id(ElementName.Next)).tap()
1414

1515
// Check is both manual and cloud backup options are available on BackupScreen
16-
await expect(element(by.id(TestID.AddCloudBackup))).toBeVisible()
17-
await expect(element(by.id(TestID.AddManualBackup))).toBeVisible()
16+
await expect(element(by.id(ElementName.AddCloudBackup))).toBeVisible()
17+
await expect(element(by.id(ElementName.AddManualBackup))).toBeVisible()
1818

1919
// Picks "Manual backup" option
20-
await element(by.id(TestID.AddManualBackup)).tap()
20+
await element(by.id(ElementName.AddManualBackup)).tap()
2121

2222
// Checks if ManualBackupScreen warning displays and taps "I'm ready" button
23-
await expect(element(by.id(TestID.Confirm))).toBeVisible()
24-
await element(by.id(TestID.Confirm)).tap()
23+
await expect(element(by.id(ElementName.Confirm))).toBeVisible()
24+
await element(by.id(ElementName.Confirm)).tap()
2525

2626
// Taps continue on ManualBackupScreen
27-
await element(by.id(TestID.Next)).tap()
27+
await element(by.id(ElementName.Next)).tap()
2828

2929
// Taps continue on manual backup confirmation screen. It is replaced by mock because detox
3030
// can't interact with native screens
31-
await element(by.id(TestID.Continue)).tap()
31+
await element(by.id(ElementName.Continue)).tap()
3232

3333
// Skips notification setup by tapping "Maybe later" button
34-
await element(by.id(TestID.Skip)).tap()
34+
await element(by.id(ElementName.Skip)).tap()
3535

3636
// Skips biometrics setup by tapping "Maybe later" button
37-
await element(by.id(TestID.Skip)).tap()
37+
await element(by.id(ElementName.Skip)).tap()
3838

3939
// Confirms by tapping "Skip" on warning modal
40-
await element(by.id(TestID.Confirm)).tap()
40+
await element(by.id(ElementName.Confirm)).tap()
4141

4242
// Confirms if user successfuly finished create new wallet flow by checking if provided wallet name is
4343
// displayed and other
4444
await expect(element(by.text(TestWallet.name))).toBeVisible()
45-
await expect(element(by.id(TestID.Swap))).toBeVisible()
46-
await expect(element(by.id(TestID.SearchTokensAndWallets))).toBeVisible()
45+
await expect(element(by.id(ElementName.Swap))).toBeVisible()
46+
await expect(element(by.id(ElementName.SearchTokensAndWallets))).toBeVisible()
4747
}

0 commit comments

Comments
 (0)