Skip to content

Commit f7a37ff

Browse files
ci(release): publish latest release
1 parent 8cbe207 commit f7a37ff

333 files changed

Lines changed: 14164 additions & 12146 deletions

File tree

Some content is hidden

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

.cursorignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
**/.env
1+
**/.env*
22
**/.aws/**
33
**/.ssh/**
44
**/.gnupg/**

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ yarn-error.log*
3636
.env
3737
.env.local
3838
.env.defaults.local
39-
.env.tmp
39+
.env.new
4040

4141
# turbo
4242
.turbo
@@ -101,6 +101,8 @@ CLAUDE.local.md
101101

102102
# argent — skills-lock.json carries per-user absolute paths; the .agents/skills/ tree itself is committed (editor-side .claude/skills/argent-* are symlinks into it)
103103
skills-lock.json
104+
# Literal "~" dir created when a tool fails to expand $HOME (e.g. argent mcp-calls.log)
105+
/~/
104106

105107
# lefthook
106108
.lefthook/

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: `QmPMstr4FqqqFmJ6g5hvSDw1Vs7KSFUtedTLtuWNZ2yApE`
3-
- CIDv1: `bafybeiapfqwr6kz7gmutbrovotycr5cmx3gdcisqojgcz23ssofim67mq4`
2+
- CIDv0: `QmUJWJo81WHKVDUhqErChc9RpDkiPXMEXgHxDtrwYE9KBL`
3+
- CIDv1: `bafybeicytf23uooetn62lhnkblkn2cttvn5gbnmhzqoy23dhkffwnxntj4`
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://bafybeiapfqwr6kz7gmutbrovotycr5cmx3gdcisqojgcz23ssofim67mq4.ipfs.dweb.link/
14-
- [ipfs://QmPMstr4FqqqFmJ6g5hvSDw1Vs7KSFUtedTLtuWNZ2yApE/](ipfs://QmPMstr4FqqqFmJ6g5hvSDw1Vs7KSFUtedTLtuWNZ2yApE/)
13+
- https://bafybeicytf23uooetn62lhnkblkn2cttvn5gbnmhzqoy23dhkffwnxntj4.ipfs.dweb.link/
14+
- [ipfs://QmUJWJo81WHKVDUhqErChc9RpDkiPXMEXgHxDtrwYE9KBL/](ipfs://QmUJWJo81WHKVDUhqErChc9RpDkiPXMEXgHxDtrwYE9KBL/)

VERSION

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

apps/extension/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@tanstack/react-query": "5.90.20",
1717
"@uniswap/analytics-events": "2.43.0",
1818
"@uniswap/client-notification-service": "0.0.11",
19-
"@uniswap/sdk-core": "7.12.1",
19+
"@uniswap/sdk-core": "7.15.0",
2020
"@uniswap/universal-router-sdk": "4.33.0",
2121
"@uniswap/v3-sdk": "3.29.1",
2222
"@uniswap/v4-sdk": "1.29.1",
@@ -27,7 +27,6 @@
2727
"@universe/notifications": "workspace:^",
2828
"@universe/sessions": "workspace:^",
2929
"@wxt-dev/module-react": "1.1.3",
30-
"dotenv-webpack": "8.0.1",
3130
"ethers": "5.7.2",
3231
"eventemitter3": "5.0.1",
3332
"i18next": "23.10.0",
@@ -85,6 +84,8 @@
8584
"concurrently": "8.2.2",
8685
"copy-webpack-plugin": "11.0.0",
8786
"css-loader": "6.11.0",
87+
"dotenv": "16.0.3",
88+
"dotenv-webpack": "8.0.1",
8889
"esbuild-loader": "3.2.0",
8990
"jest": "29.7.0",
9091
"jest-chrome": "0.8.0",

apps/extension/project.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@
8383
"options": {
8484
"cwd": "{projectRoot}"
8585
},
86+
"dependsOn": ["config:pull"],
8687
"cache": true,
8788
"inputs": [
8889
"{projectRoot}/wxt.config.ts",
@@ -92,6 +93,10 @@
9293
],
9394
"outputs": ["{projectRoot}/.wxt/types", "{projectRoot}/.wxt/tsconfig.json", "{projectRoot}/.wxt/wxt.d.ts"]
9495
},
96+
"config:pull": {
97+
"command": "if [ \"$USE_NEW_CONFIGS\" = \"true\" ]; then bun config:pull extension --env \"${CONFIG_ENV:-development}\"; fi",
98+
"options": { "cwd": "{workspaceRoot}" }
99+
},
95100
"snapshots": {
96101
"command": "jest -u",
97102
"options": {

apps/extension/src/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"manifest_version": 3,
33
"name": "Uniswap Extension",
44
"description": "The Uniswap Extension is a self-custody crypto wallet that's built for swapping.",
5-
"version": "1.74.0",
5+
"version": "1.75.0",
66
"minimum_chrome_version": "116",
77
"icons": {
88
"16": "assets/icon16.png",

apps/extension/webpack.config.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,17 @@ const NodePolyfillPlugin = require('node-polyfill-webpack-plugin')
1010

1111
const NODE_ENV = process.env.NODE_ENV || 'development'
1212
const POLL_ENV = process.env.WEBPACK_POLLING_INTERVAL
13+
const USE_NEW_CONFIGS = process.env.USE_NEW_CONFIGS === 'true'
14+
15+
// New unified config: read a single apps/extension/.env.new file. Other env sources are
16+
// ignored. Fail fast so a missing or unreadable file aborts the build instead of
17+
// silently producing a bundle with empty env values.
18+
if (USE_NEW_CONFIGS) {
19+
const newEnvPath = path.resolve(__dirname, '.env.new')
20+
if (!fs.existsSync(newEnvPath)) {
21+
throw new Error(`USE_NEW_CONFIGS=true but ${newEnvPath} does not exist`)
22+
}
23+
}
1324

1425
// if not set tamagui wont add nice data-at, data-in etc debug attributes
1526
process.env.NODE_ENV = NODE_ENV
@@ -232,6 +243,9 @@ module.exports = (env) => {
232243
path: path.resolve(__dirname, dir),
233244
clean: true,
234245
publicPath: '',
246+
// Required: `experiments.outputModule: true` flips webpack's default IIFE wrapper off, leaking
247+
// top-level `var t, e; function r;` into the page global from MAIN-world content scripts.
248+
iife: true,
235249
// Web Workers in this extension are constructed with `new Worker(..., { type: 'module' })`
236250
// (see `src/workers/hashcashWorker.ts`). `workerChunkLoading: 'import'` makes webpack
237251
// emit native `import()` for any sub-chunks instead of the classic `importScripts(<url>)`
@@ -396,10 +410,18 @@ module.exports = (env) => {
396410
},
397411
devtool: 'source-map',
398412
plugins: [
399-
new DotenvPlugin({
400-
path: '../../.env',
401-
defaults: true,
402-
}),
413+
new DotenvPlugin(
414+
USE_NEW_CONFIGS
415+
? {
416+
// When USE_NEW_CONFIGS is on, read only apps/extension/.env.new.
417+
path: '.env.new',
418+
defaults: false,
419+
}
420+
: {
421+
path: '../../.env',
422+
defaults: true,
423+
},
424+
),
403425
new DefinePlugin({
404426
__DEV__: NODE_ENV === 'development' ? 'true' : 'false',
405427
'process.env.IS_STATIC': '""',

apps/extension/wxt.config.ts

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fs from 'fs'
22
import { createHash } from 'node:crypto'
33
import path from 'path'
4+
import { parse as parseDotEnv } from 'dotenv'
45
import { loadEnv, transformWithEsbuild } from 'vite'
56
import commonjs from 'vite-plugin-commonjs'
67
import { nodePolyfills } from 'vite-plugin-node-polyfills'
@@ -13,6 +14,19 @@ import { getTsconfigAliases } from './config/getTsconfigAliases'
1314
// Tamagui static extractor can resolve it.
1415
process.env.APP_ID = 'extension'
1516

17+
const USE_NEW_CONFIGS = process.env.USE_NEW_CONFIGS === 'true'
18+
const NEW_ENV_PATH = path.resolve(import.meta.dirname, '.env.new')
19+
20+
// Fail fast so a missing .env.new aborts the build instead of silently producing
21+
// a bundle with empty env values.
22+
if (USE_NEW_CONFIGS && !fs.existsSync(NEW_ENV_PATH)) {
23+
throw new Error(`USE_NEW_CONFIGS=true but ${NEW_ENV_PATH} does not exist`)
24+
}
25+
26+
function parseEnvFile(filePath: string): Record<string, string> {
27+
return parseDotEnv(fs.readFileSync(filePath))
28+
}
29+
1630
const icons = {
1731
16: 'assets/icon16.png',
1832
32: 'assets/icon32.png',
@@ -37,7 +51,7 @@ const publicAssetsVariant = getPublicAssetsVariant()
3751

3852
const BASE_NAME = 'Uniswap Extension'
3953
const BASE_DESCRIPTION = "The Uniswap Extension is a self-custody crypto wallet that's built for swapping."
40-
const BASE_VERSION = '1.74.0'
54+
const BASE_VERSION = '1.75.0'
4155

4256
const BUILD_NUM = parseInt(process.env.BUILD_NUM || '0')
4357
const EXTENSION_VERSION = `${BASE_VERSION}.${BUILD_NUM}`
@@ -261,32 +275,25 @@ export default defineConfig({
261275

262276
// Vite configuration copied from web project
263277
vite: (env) => {
264-
// Load ALL env variables (including those without VITE_ prefix). Matches webpack's
265-
// DotenvPlugin behavior: read the monorepo-root `.env` (user-provided) AND the
266-
// monorepo-root `.env.defaults` (checked-in defaults), with `.env` taking precedence.
267-
// Vite only reads from one directory per call and doesn't know about `.env.defaults`,
268-
// so we do both loads and merge.
269-
const monorepoRoot = path.resolve(import.meta.dirname, '../..')
270-
const envDefaults = loadEnv(env.mode, monorepoRoot, '')
271-
// Re-read with a custom-named prefix file: loadEnv only looks at `.env`, `.env.local`,
272-
// `.env.<mode>`, `.env.<mode>.local`. Manually parse `.env.defaults` since Vite won't.
273-
const defaultsPath = path.join(monorepoRoot, '.env.defaults')
274-
const parsedDefaults: Record<string, string> = {}
275-
if (fs.existsSync(defaultsPath)) {
276-
for (const rawLine of fs.readFileSync(defaultsPath, 'utf-8').split('\n')) {
277-
const line = rawLine.trim()
278-
if (!line || line.startsWith('#')) continue
279-
const eq = line.indexOf('=')
280-
if (eq === -1) continue
281-
const key = line.slice(0, eq).trim()
282-
const value = line
283-
.slice(eq + 1)
284-
.trim()
285-
.replace(/^['"]|['"]$/g, '')
286-
parsedDefaults[key] = value
287-
}
278+
let envVars: Record<string, string>
279+
if (USE_NEW_CONFIGS) {
280+
// New unified config: read only apps/extension/.env.new. Other env sources
281+
// (monorepo-root .env / .env.defaults / etc.) are ignored.
282+
envVars = parseEnvFile(NEW_ENV_PATH)
283+
} else {
284+
// Load ALL env variables (including those without VITE_ prefix). Matches webpack's
285+
// DotenvPlugin behavior: read the monorepo-root `.env` (user-provided) AND the
286+
// monorepo-root `.env.defaults` (checked-in defaults), with `.env` taking precedence.
287+
// Vite only reads from one directory per call and doesn't know about `.env.defaults`,
288+
// so we do both loads and merge.
289+
const monorepoRoot = path.resolve(import.meta.dirname, '../..')
290+
const envDefaults = loadEnv(env.mode, monorepoRoot, '')
291+
// Re-read with a custom-named prefix file: loadEnv only looks at `.env`, `.env.local`,
292+
// `.env.<mode>`, `.env.<mode>.local`. Manually parse `.env.defaults` since Vite won't.
293+
const defaultsPath = path.join(monorepoRoot, '.env.defaults')
294+
const parsedDefaults = fs.existsSync(defaultsPath) ? parseEnvFile(defaultsPath) : {}
295+
envVars = { ...parsedDefaults, ...envDefaults }
288296
}
289-
const envVars = { ...parsedDefaults, ...envDefaults }
290297

291298
const __dirname = path.dirname(new URL(import.meta.url).pathname)
292299
const isProduction = process.env.NODE_ENV === 'production'

apps/mobile/android/app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ if (isCI && datadogPropertiesAvailable) {
6767
apply from: "../../../../node_modules/@datadog/mobile-react-native/datadog-sourcemaps.gradle"
6868
}
6969

70-
def devVersionName = "1.74"
71-
def betaVersionName = "1.74"
72-
def prodVersionName = "1.74"
70+
def devVersionName = "1.75"
71+
def betaVersionName = "1.75"
72+
def prodVersionName = "1.75"
7373

7474
android {
7575
ndkVersion rootProject.ext.ndkVersion

0 commit comments

Comments
 (0)