Skip to content

Commit 46ccc22

Browse files
ci(release): publish latest release
1 parent fdf7aa2 commit 46ccc22

4 files changed

Lines changed: 24 additions & 8 deletions

File tree

RELEASE

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
IPFS hash of the deployment:
2-
- CIDv0: `QmUUmgx7Hpd5Pjf88zjfcg8Gq9Entkz4G8Tq6GdNPaYgaT`
3-
- CIDv1: `bafybeic3hkurdl6na3vwj2o4esg6xwdz4ydvekpbsym25u6gz4cz2gyl7a`
2+
- CIDv0: `QmdDx5deWHGDuMypAwMLmaRE34Gxyr6CeyKSLoECMepymr`
3+
- CIDv1: `bafybeig5e7qt2nzdxmxfwobch2bemw724ebwkvfy7mcrv6kr5sxevhaioe`
44

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

@@ -10,5 +10,5 @@ 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://bafybeic3hkurdl6na3vwj2o4esg6xwdz4ydvekpbsym25u6gz4cz2gyl7a.ipfs.dweb.link/
14-
- [ipfs://QmUUmgx7Hpd5Pjf88zjfcg8Gq9Entkz4G8Tq6GdNPaYgaT/](ipfs://QmUUmgx7Hpd5Pjf88zjfcg8Gq9Entkz4G8Tq6GdNPaYgaT/)
13+
- https://bafybeig5e7qt2nzdxmxfwobch2bemw724ebwkvfy7mcrv6kr5sxevhaioe.ipfs.dweb.link/
14+
- [ipfs://QmdDx5deWHGDuMypAwMLmaRE34Gxyr6CeyKSLoECMepymr/](ipfs://QmdDx5deWHGDuMypAwMLmaRE34Gxyr6CeyKSLoECMepymr/)

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
web/5.153.4
1+
web/5.153.5

apps/web/functions/app.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ describe('frame protection headers', () => {
3232
const app = buildApp()
3333
const res = await app.request('/')
3434

35-
expect(res.headers.get('Content-Security-Policy')).toBe("frame-ancestors 'self' https://app.safe.global")
35+
expect(res.headers.get('Content-Security-Policy')).toBe(
36+
"frame-ancestors 'self' https://app.safe.global https://dexscreener.com https://*.dexscreener.com",
37+
)
3638
})
3739

3840
it('sets X-Frame-Options header on SPA routes', async () => {
@@ -46,7 +48,9 @@ describe('frame protection headers', () => {
4648
const app = buildApp()
4749
const res = await app.request('/swap')
4850

49-
expect(res.headers.get('Content-Security-Policy')).toBe("frame-ancestors 'self' https://app.safe.global")
51+
expect(res.headers.get('Content-Security-Policy')).toBe(
52+
"frame-ancestors 'self' https://app.safe.global https://dexscreener.com https://*.dexscreener.com",
53+
)
5054
expect(res.headers.get('X-Frame-Options')).toBe('SAMEORIGIN')
5155
})
5256

apps/web/functions/app.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,21 @@ interface AppConfig {
4444
// frame-ancestors cannot be enforced via <meta> CSP tags (W3C spec) — it
4545
// must be an HTTP response header. Cloudflare Workers returns responses
4646
// with immutable headers, so we clone into a mutable Response.
47+
// Origins allowed to iframe-embed the app. Whitelisting an embedder
48+
// relaxes clickjacking protection for that origin — treat additions as a
49+
// deliberate product/security tradeoff.
50+
// A wildcard host-source does not match the apex domain, so dexscreener.com
51+
// needs both the apex and the subdomain-wildcard entries.
52+
const ALLOWED_FRAME_ANCESTORS = [
53+
"'self'",
54+
'https://app.safe.global',
55+
'https://dexscreener.com',
56+
'https://*.dexscreener.com',
57+
]
58+
4759
function withFrameProtection(res: Response): Response {
4860
const headers = new Headers(res.headers)
49-
headers.set('Content-Security-Policy', "frame-ancestors 'self' https://app.safe.global")
61+
headers.set('Content-Security-Policy', `frame-ancestors ${ALLOWED_FRAME_ANCESTORS.join(' ')}`)
5062
headers.set('X-Frame-Options', 'SAMEORIGIN')
5163
return new Response(res.body, { status: res.status, statusText: res.statusText, headers })
5264
}

0 commit comments

Comments
 (0)