Skip to content

Commit 08d6805

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

File tree

395 files changed

+10664
-4815
lines changed

Some content is hidden

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

395 files changed

+10664
-4815
lines changed

.prettierignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ apps/mobile/android
3838

3939
# extension
4040

41-
apps/stretch/dev
41+
apps/extension/dev
4242

4343
# packages
4444

RELEASE

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
IPFS hash of the deployment:
2-
- CIDv0: `QmY1uds14DFpDG7TsuCqiH5965u1GCVZPZ4GQ9AgcMCjcb`
3-
- CIDv1: `bafybeiepy63dfywcra662v3iuz2ym2aiz7smx6syyiaga6yttjjgf53oca`
2+
- CIDv0: `QmaNrzdiCZfezB1GYBZprZVoAh4KGsaZjzVH9qSmDCvZDv`
3+
- CIDv1: `bafybeifs3vfz27oqei35fu5fg6pfgzz3eacp3rdyhg7lvm5mp63iiauomu`
44

55
The latest release is always mirrored at [app.uniswap.org](https://app.uniswap.org).
66

@@ -10,15 +10,41 @@ You can also access the Uniswap Interface from an IPFS gateway.
1010
Your Uniswap settings are never remembered across different URLs.
1111

1212
IPFS gateways:
13-
- https://bafybeiepy63dfywcra662v3iuz2ym2aiz7smx6syyiaga6yttjjgf53oca.ipfs.dweb.link/
14-
- https://bafybeiepy63dfywcra662v3iuz2ym2aiz7smx6syyiaga6yttjjgf53oca.ipfs.cf-ipfs.com/
15-
- [ipfs://QmY1uds14DFpDG7TsuCqiH5965u1GCVZPZ4GQ9AgcMCjcb/](ipfs://QmY1uds14DFpDG7TsuCqiH5965u1GCVZPZ4GQ9AgcMCjcb/)
13+
- https://bafybeifs3vfz27oqei35fu5fg6pfgzz3eacp3rdyhg7lvm5mp63iiauomu.ipfs.dweb.link/
14+
- https://bafybeifs3vfz27oqei35fu5fg6pfgzz3eacp3rdyhg7lvm5mp63iiauomu.ipfs.cf-ipfs.com/
15+
- [ipfs://QmaNrzdiCZfezB1GYBZprZVoAh4KGsaZjzVH9qSmDCvZDv/](ipfs://QmaNrzdiCZfezB1GYBZprZVoAh4KGsaZjzVH9qSmDCvZDv/)
1616

17-
### 5.38.1 (2024-07-03)
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
1833

1934

2035
### Bug Fixes
2136

22-
* **web:** hotfix for rive not loading (#9859) 9c6a007
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
2349

2450

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web/5.38.1
1+
web/5.39.0
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// Copied from:
2+
// https://gist.github.com/phcbarros/bd90825863c3573cc0a28e90db17d1a4
3+
const RNN = require('@react-navigation/native')
4+
let listeners = {}
5+
const setOptions = jest.fn()
6+
const navigate = jest.fn()
7+
8+
const navigation = {
9+
setOptions,
10+
navigate,
11+
addListener: jest.fn((name, l) => (listeners[name] = l)),
12+
getListener: (name) => listeners[name],
13+
triggerListener: (name, ...params) => listeners[name](...params),
14+
resetListeners: () => {
15+
listeners = {}
16+
},
17+
}
18+
19+
const useNavigation = () => navigation
20+
let params = {}
21+
const useRoute = () => ({
22+
params,
23+
})
24+
25+
module.exports = {
26+
...RNN,
27+
useNavigation,
28+
useRoute,
29+
setParams: (p) => (params = { ...params, ...p }),
30+
}

apps/mobile/e2e/Onboarding.e2e.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { CreateNewWallet } from 'e2e/usecases/onboarding/CreateNewWallet'
2-
import { ImportWallet } from 'e2e/usecases/onboarding/ImportWallet'
32
import { WatchWallet } from 'e2e/usecases/onboarding/WatchWallet'
43

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

1514
it('creates a new wallet', CreateNewWallet)
1615
it('watches wallet', WatchWallet)
17-
it('imports a testing wallet using recovery phrase', ImportWallet)
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)
1819
})

apps/mobile/e2e/usecases/CreateNewWallet.ts

Lines changed: 0 additions & 49 deletions
This file was deleted.
Lines changed: 16 additions & 16 deletions
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 { ElementName } from 'uniswap/src/features/telemetry/constants'
3+
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
44

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

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

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

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

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

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

2626
// Taps continue on ManualBackupScreen
27-
await element(by.id(ElementName.Next)).tap()
27+
await element(by.id(TestID.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(ElementName.Continue)).tap()
31+
await element(by.id(TestID.Continue)).tap()
3232

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

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

3939
// Confirms by tapping "Skip" on warning modal
40-
await element(by.id(ElementName.Confirm)).tap()
40+
await element(by.id(TestID.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(ElementName.Swap))).toBeVisible()
46-
await expect(element(by.id(ElementName.SearchTokensAndWallets))).toBeVisible()
45+
await expect(element(by.id(TestID.Swap))).toBeVisible()
46+
await expect(element(by.id(TestID.SearchTokensAndWallets))).toBeVisible()
4747
}
Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
11
import { by, element, expect } from 'detox'
22
import { TestWallet } from 'e2e/utils/fixtures'
3-
import { ElementName } from 'uniswap/src/features/telemetry/constants'
3+
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
44

55
export async function ImportWallet(): Promise<void> {
66
// Selects "Add an existing wallet" option on the landing screen
7-
await element(by.id(ElementName.ImportAccount)).tap()
7+
await element(by.id(TestID.ImportAccount)).tap()
88

99
// Picks Import a wallet by recovery phase option
10-
await element(by.id(ElementName.OnboardingImportSeedPhrase)).tap()
10+
await element(by.id(TestID.OnboardingImportSeedPhrase)).tap()
1111

1212
// Checks if recovery phase input is in focus and types recovery phrase in
13-
await expect(element(by.id(ElementName.ImportAccountInput))).toBeFocused()
14-
await element(by.id(ElementName.ImportAccountInput)).typeText(TestWallet.recoveryPhrase)
13+
await expect(element(by.id(TestID.ImportAccountInput))).toBeFocused()
14+
await element(by.id(TestID.ImportAccountInput)).typeText(TestWallet.recoveryPhrase)
1515

1616
// Taps continue navigating to SelectWalletScreen
17-
await element(by.id(ElementName.Continue)).tap()
17+
await element(by.id(TestID.Continue)).tap()
1818

1919
// Taps continue on SelectWalletScreen
20-
await waitFor(element(by.id(`${ElementName.WalletCard}-1`)))
20+
await waitFor(element(by.id(`${TestID.WalletCard}-1`)))
2121
.toBeVisible()
2222
.withTimeout(10000)
23-
await element(by.id(ElementName.Next)).tap()
23+
await element(by.id(TestID.Next)).tap()
2424

2525
// Skips cloud backup step on BackupScreen by clicking "Maybe later"
26-
await expect(element(by.id(ElementName.AddCloudBackup))).toBeVisible()
27-
await element(by.id(ElementName.Next)).tap()
26+
await expect(element(by.id(TestID.AddCloudBackup))).toBeVisible()
27+
await element(by.id(TestID.Next)).tap()
2828

2929
// Skips notification setup by tapping "Maybe later" button
30-
await element(by.id(ElementName.Skip)).tap()
30+
await element(by.id(TestID.Skip)).tap()
3131

3232
// Skips biometrics setup by tapping "Maybe later" button
33-
await element(by.id(ElementName.Skip)).tap()
33+
await element(by.id(TestID.Skip)).tap()
3434

3535
// Confirms by tapping "Skip" on warning modal
36-
await element(by.id(ElementName.Confirm)).tap()
36+
await element(by.id(TestID.Confirm)).tap()
3737

3838
// Confirms if user successfuly finished create new wallet flow by checking if provided wallet name is
3939
// displayed and other
4040
await expect(element(by.text(TestWallet.name))).toBeVisible()
41-
await expect(element(by.id(ElementName.Swap))).toBeVisible()
42-
await expect(element(by.id(ElementName.SearchTokensAndWallets))).toBeVisible()
41+
await expect(element(by.id(TestID.Swap))).toBeVisible()
42+
await expect(element(by.id(TestID.SearchTokensAndWallets))).toBeVisible()
4343
}
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import { by, element, expect } from 'detox'
22
import { TestWatchedWallet } from 'e2e/utils/fixtures'
3-
import { ElementName } from 'uniswap/src/features/telemetry/constants'
3+
import { TestID } from 'uniswap/src/test/fixtures/testIDs'
44

55
export async function WatchWallet(): Promise<void> {
66
// Selects "Add an existing wallet" option on the landing screen
7-
await element(by.id(ElementName.ImportAccount)).tap()
7+
await element(by.id(TestID.ImportAccount)).tap()
88

99
// Picks Watch a wallet option on ImportMethodScreen
10-
await element(by.id(ElementName.WatchWallet)).tap()
10+
await element(by.id(TestID.WatchWallet)).tap()
1111

1212
// Checks if wallet name is in focus and types recovery phrase in
13-
await expect(element(by.id(ElementName.ImportAccountInput))).toBeFocused()
14-
await element(by.id(ElementName.ImportAccountInput)).typeText(TestWatchedWallet.ens)
13+
await expect(element(by.id(TestID.ImportAccountInput))).toBeFocused()
14+
await element(by.id(TestID.ImportAccountInput)).typeText(TestWatchedWallet.ens)
1515

1616
// Confirms the entered wallet name by tapping "continue"
17-
await element(by.id(ElementName.Next)).tap()
17+
await element(by.id(TestID.Next)).tap()
1818

1919
// Checks if Home screen is displayed with a proper user name
2020
await expect(element(by.text(TestWatchedWallet.displayName))).toBeVisible()
21-
await expect(element(by.id(ElementName.Swap))).toBeVisible()
22-
await expect(element(by.id(ElementName.SearchTokensAndWallets))).toBeVisible()
21+
await expect(element(by.id(TestID.Swap))).toBeVisible()
22+
await expect(element(by.id(TestID.SearchTokensAndWallets))).toBeVisible()
2323
}

0 commit comments

Comments
 (0)