Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
interface
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
LuckySwap
interface
Commits
f499f546
Commit
f499f546
authored
May 07, 2025
by
Uniswap Labs Service Account
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ci(release): publish latest release
parent
830fbd6c
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
37 additions
and
125 deletions
+37
-125
RELEASE
RELEASE
+6
-89
VERSION
VERSION
+1
-1
handleGetCapabilities.test.ts
...tate/walletCapabilities/lib/handleGetCapabilities.test.ts
+7
-6
handleGetCapabilities.ts
...src/state/walletCapabilities/lib/handleGetCapabilities.ts
+1
-6
utils.test.ts
packages/ui/src/theme/color/utils.test.ts
+21
-19
utils.ts
packages/ui/src/theme/color/utils.ts
+1
-4
No files found.
RELEASE
View file @
f499f546
IPFS hash of the deployment:
IPFS hash of the deployment:
- CIDv0: `Qm
QY8h9hoqVp2nqyiK9W1VSqyFij9yG2UzMfZGbVR9hcfq
`
- CIDv0: `Qm
TQqr7ckQqN7ncCEsymtg82FzqqLErWZtxrNqYbZWrhw6
`
- CIDv1: `bafybei
bavbtwbt67v3e6xufqkwzfhb47pyuavqudshfmqxp33zuvx5efpa
`
- CIDv1: `bafybei
cllvnavu3b6ygl2dqoi7z2hj4lsdeilowenblayhvxvprpsyzcle
`
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,97 +10,14 @@ You can also access the Uniswap Interface from an IPFS gateway.
...
@@ -10,97 +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://bafybei
bavbtwbt67v3e6xufqkwzfhb47pyuavqudshfmqxp33zuvx5efpa
.ipfs.dweb.link/
- https://bafybei
cllvnavu3b6ygl2dqoi7z2hj4lsdeilowenblayhvxvprpsyzcle
.ipfs.dweb.link/
- [ipfs://Qm
QY8h9hoqVp2nqyiK9W1VSqyFij9yG2UzMfZGbVR9hcfq/](ipfs://QmQY8h9hoqVp2nqyiK9W1VSqyFij9yG2UzMfZGbVR9hcfq
/)
- [ipfs://Qm
TQqr7ckQqN7ncCEsymtg82FzqqLErWZtxrNqYbZWrhw6/](ipfs://QmTQqr7ckQqN7ncCEsymtg82FzqqLErWZtxrNqYbZWrhw6
/)
## 5.83.0 (2025-05-07)
### 5.83.1 (2025-05-07)
### Features
* **web:** add analytics event for embedded wallet sign in (#18908) 4258201
* **web:** add batched capability to legacy swap tx and gas info (#19139) 7e98a92
* **web:** add feature flags for permit mismatch (#19007) 0890576
* **web:** add pools to recent searches (#17403) 5ffc92b
* **web:** allow slippage in create, increase, and decrease (#18674) 0a37dcc
* **web:** batch analytics [staging mirror] (#19335) b59b8de
* **web:** batched swap feature flag (#19169) fd30fb3
* **web:** clean up web state, smartWallet reducer, hooks, etc (#18961) 0e3840e
* **web:** create toast component for mismatch case (#18962) 8cbd058
* **web:** create useMismatchAccount (#18870) f2ce7ed
* **web:** delegation mismatch modal (#18980) 301a7de
* **web:** disable uniswapx on quote args if mismatch account (#18907) 185d1a4
* **web:** gate limit order feature for mismatched delegation (#18979) 840d1f8
* **web:** implement permit tx step in UI / saga (#18898) 8b7362d
* **web:** limited support ui in mini p (#18990) daff0c4
* **web:** multi mismatch calls (#18955) 737f851
* **web:** mweb sign in connector polish (#18968) 2928718
* **web:** pass uniquote enabled to trading api requests (#18984) d3ea833
* **web:** poll 5792 txs (#19138) 36f8910
* **web:** prevent passkey sign in/up when iframed (#19015) f4174c5
* **web:** Recently connected modal polish (#18790) f1291d6
* **web:** retry with standard swap if batched fails (#19303) 8a774d3
* **web:** Sign In UX polish (#18798) 5805f2d
* **web:** submit batched transactions (#19079) 8c769ec
* **web:** track atomic supported chains (#19163) abda850
* **web:** track delegate status as user properties (#19331) d71c1ac
* **web:** track user prop delegate status (#19286) (#19308) 8168cfa
* **web:** update activity type and relevant UI (#19130) f0a6e65
### Bug Fixes
### Bug Fixes
* **web:** add additional statsig api urls to our csp.json file (#19034) ce2b43a
* **web:** downgrade two errors to warnings (#19345) 88caf96
* **web:** add uniquote to ff modal (#19032) 073bf6c
* **web:** Adjust layout of TDP Stats (#18034) 747daed
* **web:** allow .env.defaults in the public repo (#19164) ed9e9f7
* **web:** allow access to testnet or mainnet tdps (#19166) 1dec896
* **web:** change colors of Slippage Input border when in a warning state (#18013) e04838e
* **web:** change numbers on the landing page (#18431) 7588d1b
* **web:** Change tooltip shadow color to black and align styling with Spore style (#18028) b531277
* **web:** check against all chains for mismatch (#19027) 08df5c7
* **web:** consistent delta arrow for amts close to zero (#18954) b55f4fb
* **web:** default to eth on mainnet for buy form (#18976) 6cb69dd
* **web:** display helper modal when token or pool not found (#18801) ff3a040
* **web:** don't fetch approvals when smartWallet or batched enabled (#19140) ba4a3b6
* **web:** fix approval call for create + increase (#19224) ffb2f62
* **web:** Fix styling of outage banner (#19113) 74318ed
* **web:** fix username in header via Web3Status (#18885) 97e6ed6
* **web:** Get The App playwright test (#19099) 4c9fa04
* **web:** improve lp page performance - extraneous quote requests (#18958) 0c8e6e2
* **web:** log statsig events to datadog (#19042) 72a7bac
* **web:** missing permit tx (#19327) 4358581
* **web:** more code splitting (#19086) a137af7
* **web:** parse both number and hex from getCapabilities (#19200) 9041a85
* **web:** persist toast forever (#19067) e52c747
* **web:** revert - track user prop delegate status [staging only] (#19311) c57a266
* **web:** tick tooltip overlap with graph boundary (#18971) 5e2e849
* **web:** Update app icon SVG so it renders properly in Safari (#18031) 01c0e75
* **web:** Update opacify util (#19037) 6dddf59
* **web:** update tx toast styles (#17640) 57d23a1
* **web:** use neutral1 color as the default text color for NumericalInputSymbol (#18901) 0e324f2
### Continuous Integration
* **web:** update sitemaps 6462060
### Tests
* **web:** improved slack reporter (#19107) a828bf4
* **web:** remaining swap tests (#19090) b52a122
* **web:** stub gql SearchTokens in LP e2e test (#18964) b754a4a
* **web:** swap settings e2e tests (#19087) d757545
* **web:** test statsig flags (#19127) f15d67c
* **web:** wrap tests (#19091) 2036ab5
### Code Refactoring
* **web:** break out fn and useMutation (#18869) 0b940c7
* **web:** break out what vs how of useRoutingApiAruguments (#18905) 0d1c4d4
* **web:** clean up routing type condition (#18906) ba8be91
* **web:** move createGetRoutingAPIArguments to file (#18909) d58014c
VERSION
View file @
f499f546
web/5.83.0
web/5.83.1
\ No newline at end of file
\ No newline at end of file
apps/web/src/state/walletCapabilities/lib/handleGetCapabilities.test.ts
View file @
f499f546
...
@@ -18,6 +18,7 @@ jest.mock('components/Web3Provider/wagmiConfig', () => ({
...
@@ -18,6 +18,7 @@ jest.mock('components/Web3Provider/wagmiConfig', () => ({
jest
.
mock
(
'
utilities/src/logger/logger
'
,
()
=>
({
jest
.
mock
(
'
utilities/src/logger/logger
'
,
()
=>
({
getLogger
:
jest
.
fn
(()
=>
({
getLogger
:
jest
.
fn
(()
=>
({
error
:
jest
.
fn
(),
error
:
jest
.
fn
(),
warn
:
jest
.
fn
(),
})),
})),
}))
}))
...
@@ -41,14 +42,14 @@ describe('walletCapabilities', () => {
...
@@ -41,14 +42,14 @@ describe('walletCapabilities', () => {
it
(
'
returns null for invalid response
'
,
async
()
=>
{
it
(
'
returns null for invalid response
'
,
async
()
=>
{
// Make sure the logger is properly mocked before the test
// Make sure the logger is properly mocked before the test
const
mockLogger
Error
=
jest
.
fn
()
const
mockLogger
Warn
=
jest
.
fn
()
;(
getLogger
as
jest
.
Mock
).
mockReturnValue
({
error
:
mockLoggerError
})
;(
getLogger
as
jest
.
Mock
).
mockReturnValue
({
error
:
jest
.
fn
(),
warn
:
mockLoggerWarn
})
// Invalid mock response (missing 0x prefix)
// Invalid mock response (missing 0x prefix)
;(
wagmi_getCapabilities
as
jest
.
Mock
).
mockResolvedValue
({
asdada
:
{
atomic
:
{
status
:
'
supported
'
}
}
})
;(
wagmi_getCapabilities
as
jest
.
Mock
).
mockResolvedValue
({
asdada
:
{
atomic
:
{
status
:
'
supported
'
}
}
})
expect
(
await
handleGetCapabilities
()).
toBeNull
()
expect
(
await
handleGetCapabilities
()).
toBeNull
()
expect
(
mockLogger
Error
).
toHaveBeenCalled
()
expect
(
mockLogger
Warn
).
toHaveBeenCalled
()
})
})
it
(
'
returns null on timeout
'
,
async
()
=>
{
it
(
'
returns null on timeout
'
,
async
()
=>
{
...
@@ -60,12 +61,12 @@ describe('walletCapabilities', () => {
...
@@ -60,12 +61,12 @@ describe('walletCapabilities', () => {
it
(
'
returns null on error
'
,
async
()
=>
{
it
(
'
returns null on error
'
,
async
()
=>
{
// Make sure the logger is properly mocked before the test
// Make sure the logger is properly mocked before the test
const
mockLogger
Error
=
jest
.
fn
()
const
mockLogger
Warn
=
jest
.
fn
()
;(
getLogger
as
jest
.
Mock
).
mockReturnValue
({
error
:
mockLoggerError
})
;(
getLogger
as
jest
.
Mock
).
mockReturnValue
({
error
:
jest
.
fn
(),
warn
:
mockLoggerWarn
})
;(
wagmi_getCapabilities
as
jest
.
Mock
).
mockRejectedValue
(
new
Error
(
'
API error
'
))
;(
wagmi_getCapabilities
as
jest
.
Mock
).
mockRejectedValue
(
new
Error
(
'
API error
'
))
expect
(
await
handleGetCapabilities
()).
toBeNull
()
expect
(
await
handleGetCapabilities
()).
toBeNull
()
expect
(
mockLogger
Error
).
toHaveBeenCalled
()
expect
(
mockLogger
Warn
).
toHaveBeenCalled
()
})
})
})
})
...
...
apps/web/src/state/walletCapabilities/lib/handleGetCapabilities.ts
View file @
f499f546
...
@@ -30,12 +30,7 @@ export async function handleGetCapabilities(): Promise<GetCapabilitiesResult | n
...
@@ -30,12 +30,7 @@ export async function handleGetCapabilities(): Promise<GetCapabilitiesResult | n
if
(
error
instanceof
Error
&&
error
.
message
.
includes
(
'
getCapabilities timeout
'
))
{
if
(
error
instanceof
Error
&&
error
.
message
.
includes
(
'
getCapabilities timeout
'
))
{
return
null
return
null
}
}
getLogger
().
error
(
error
||
new
Error
(
'
Unknown error getting capabilities
'
),
{
getLogger
().
warn
(
'
useWalletCapabilities
'
,
'
handleGetCapabilities
'
,
`Error getting capabilities:
${
error
}
`
)
tags
:
{
file
:
'
useWalletCapabilities.ts
'
,
function
:
'
handleGetCapabilities
'
,
},
})
return
null
return
null
}
finally
{
}
finally
{
// prevent memory leaks
// prevent memory leaks
...
...
packages/ui/src/theme/color/utils.test.ts
View file @
f499f546
...
@@ -3,6 +3,7 @@ import { opacifyRaw } from 'ui/src/theme'
...
@@ -3,6 +3,7 @@ import { opacifyRaw } from 'ui/src/theme'
jest
.
mock
(
'
utilities/src/logger/logger
'
,
()
=>
({
jest
.
mock
(
'
utilities/src/logger/logger
'
,
()
=>
({
logger
:
{
logger
:
{
error
:
jest
.
fn
(),
error
:
jest
.
fn
(),
warn
:
jest
.
fn
(),
},
},
}))
}))
...
@@ -34,26 +35,27 @@ describe(opacifyRaw, () => {
...
@@ -34,26 +35,27 @@ describe(opacifyRaw, () => {
it
.
each
`
it
.
each
`
amount | color | expectedError
amount | color | expectedError
${
110
}
|
${
'
#aaaaaa
'
}
|
${
'
provided opacity 110 should be between 0 and 100
'
}
${
110
}
|
${
'
#aaaaaa
'
}
|
${
'
Error:
provided opacity 110 should be between 0 and 100
'
}
${
110.99
}
|
${
'
#aaaaaa
'
}
|
${
'
provided opacity 110.99 should be between 0 and 100
'
}
${
110.99
}
|
${
'
#aaaaaa
'
}
|
${
'
Error:
provided opacity 110.99 should be between 0 and 100
'
}
${
-
10
}
|
${
'
#123456
'
}
|
${
'
provided opacity -10 should be between 0 and 100
'
}
${
-
10
}
|
${
'
#123456
'
}
|
${
'
Error:
provided opacity -10 should be between 0 and 100
'
}
${
-
10.11
}
|
${
'
#123456
'
}
|
${
'
provided opacity -10.11 should be between 0 and 100
'
}
${
-
10.11
}
|
${
'
#123456
'
}
|
${
'
Error:
provided opacity -10.11 should be between 0 and 100
'
}
${
undefined
}
|
${
'
123456
'
}
|
${
'
provided opacity undefined should be between 0 and 100
'
}
${
undefined
}
|
${
'
123456
'
}
|
${
'
Error:
provided opacity undefined should be between 0 and 100
'
}
${
50
}
|
${
undefined
}
|
${
"
Cannot read properties of undefined (reading 'startsWith')
"
}
${
50
}
|
${
undefined
}
|
${
"
TypeError:
Cannot read properties of undefined (reading 'startsWith')
"
}
${
50
}
|
${
'
123456
'
}
|
${
'
provided color 123456 is neither a hex nor an rgb color
'
}
${
50
}
|
${
'
123456
'
}
|
${
'
Error:
provided color 123456 is neither a hex nor an rgb color
'
}
${
50
}
|
${
'
#12
'
}
|
${
'
provided color #12 was not in hexadecimal format (e.g. #000000)
'
}
${
50
}
|
${
'
#12
'
}
|
${
'
Error:
provided color #12 was not in hexadecimal format (e.g. #000000)
'
}
${
50
}
|
${
'
#gggggg
'
}
|
${
'
provided color #gggggg contains invalid characters, should be a valid hex (e.g. #000000)
'
}
${
50
}
|
${
'
#gggggg
'
}
|
${
'
Error:
provided color #gggggg contains invalid characters, should be a valid hex (e.g. #000000)
'
}
${
50
}
|
${
'
rgb(1,1,
'
}
|
${
'
provided color rgb(1,1, is invalid rgb format
'
}
${
50
}
|
${
'
rgb(1,1,
'
}
|
${
'
Error:
provided color rgb(1,1, is invalid rgb format
'
}
${
50
}
|
${
'
rgb(1,1)
'
}
|
${
'
provided color rgb(1,1) does not have enough components
'
}
${
50
}
|
${
'
rgb(1,1)
'
}
|
${
'
Error:
provided color rgb(1,1) does not have enough components
'
}
${
50
}
|
${
'
rgbv(1,1,1,1)
'
}
|
${
'
provided color rgbv(1,1,1,1) is neither a hex nor an rgb color
'
}
${
50
}
|
${
'
rgbv(1,1,1,1)
'
}
|
${
'
Error:
provided color rgbv(1,1,1,1) is neither a hex nor an rgb color
'
}
${
100
}
|
${
'
rgba(255, 255, 255, 0.5)
'
}
|
${
'
provided color rgba(255, 255, 255, 0.5) is neither a hex nor an rgb color
'
}
${
100
}
|
${
'
rgba(255, 255, 255, 0.5)
'
}
|
${
'
Error:
provided color rgba(255, 255, 255, 0.5) is neither a hex nor an rgb color
'
}
${
30
}
|
${
'
rgba(255, 255, 255, 0.5)
'
}
|
${
'
provided color rgba(255, 255, 255, 0.5) is neither a hex nor an rgb color
'
}
${
30
}
|
${
'
rgba(255, 255, 255, 0.5)
'
}
|
${
'
Error:
provided color rgba(255, 255, 255, 0.5) is neither a hex nor an rgb color
'
}
${
33.111111
}
|
${
'
rgba(255, 255, 255, 0.5)
'
}
|
${
'
provided color rgba(255, 255, 255, 0.5) is neither a hex nor an rgb color
'
}
${
33.111111
}
|
${
'
rgba(255, 255, 255, 0.5)
'
}
|
${
'
Error:
provided color rgba(255, 255, 255, 0.5) is neither a hex nor an rgb color
'
}
`
(
'
should throw an error when (amount=$amount, color=$color)
'
,
async
({
amount
,
color
,
expectedError
})
=>
{
`
(
'
should throw an error when (amount=$amount, color=$color)
'
,
async
({
amount
,
color
,
expectedError
})
=>
{
opacifyRaw
(
amount
,
color
)
opacifyRaw
(
amount
,
color
)
expect
(
logger
.
error
).
toHaveBeenCalledWith
(
new
Error
(
expectedError
),
{
expect
(
logger
.
warn
).
toHaveBeenCalledWith
(
tags
:
{
file
:
'
color/utils
'
,
function
:
'
opacifyRaw
'
},
'
color/utils
'
,
extra
:
{
args
:
[
amount
,
color
]
},
'
opacifyRaw
'
,
})
`Error opacifying color
${
color
}
with opacity
${
amount
}
:
${
expectedError
}
`
,
)
})
})
})
})
packages/ui/src/theme/color/utils.ts
View file @
f499f546
...
@@ -36,10 +36,7 @@ export function opacifyRaw(opacity: number, color: string): string {
...
@@ -36,10 +36,7 @@ export function opacifyRaw(opacity: number, color: string): string {
}
}
throw
new
Error
(
`provided color
${
color
}
is neither a hex nor an rgb color`
)
throw
new
Error
(
`provided color
${
color
}
is neither a hex nor an rgb color`
)
}
catch
(
e
)
{
}
catch
(
e
)
{
logger
.
error
(
e
,
{
logger
.
warn
(
'
color/utils
'
,
'
opacifyRaw
'
,
`Error opacifying color
${
color
}
with opacity
${
opacity
}
:
${
e
}
`
)
tags
:
{
file
:
'
color/utils
'
,
function
:
'
opacifyRaw
'
},
extra
:
{
args
:
[
opacity
,
color
]
},
})
}
}
return
color
return
color
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment