From 7c4c1b4641c9f843216d850c86d3eacdd15e6170 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 23 Feb 2026 12:07:50 -0300 Subject: [PATCH 01/18] Fix dependabot security vulnerabilities by upgrading dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated package versions and added resolutions/overrides for: - tar: 7.5.6 → 7.5.8 (hardlink/symlink path traversal fixes) - qs: 6.14.1 → 6.14.2 (arrayLimit DoS bypass) - hono: 4.11.4 → 4.11.10 (XSS, cache deception, IP spoofing fixes) - @playwright/test: 1.49.1 → 1.55.1 (SSL certificate verification) - Added ajv 8.18.0, lodash 4.17.23, webpack 5.104.1, bn.js 5.2.3, minimatch 10.2.1 Co-Authored-By: Claude Haiku 4.5 --- apps/native/package.json | 2 +- examples/expo-multichain/package-lock.json | 320 +++------------------ examples/expo-multichain/package.json | 9 +- package.json | 9 +- yarn.lock | 253 ++++++++++------ 5 files changed, 214 insertions(+), 379 deletions(-) diff --git a/apps/native/package.json b/apps/native/package.json index ee500f06..e8bc3262 100644 --- a/apps/native/package.json +++ b/apps/native/package.json @@ -52,7 +52,7 @@ }, "devDependencies": { "@babel/core": "7.26.10", - "@playwright/test": "1.49.1", + "@playwright/test": "1.55.1", "@types/gh-pages": "6", "@types/node": "22.10.1", "@types/react": "~18.2.79", diff --git a/examples/expo-multichain/package-lock.json b/examples/expo-multichain/package-lock.json index bfbbdf68..b2733966 100644 --- a/examples/expo-multichain/package-lock.json +++ b/examples/expo-multichain/package-lock.json @@ -1808,21 +1808,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1858,11 +1843,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, "node_modules/@eslint/js": { "version": "9.34.0", "dev": true, @@ -1998,15 +1978,6 @@ "xml2js": "0.6.0" } }, - "node_modules/@expo/config-plugins/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@expo/config-plugins/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -2042,21 +2013,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@expo/config-plugins/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@expo/config-plugins/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -2088,15 +2044,6 @@ "@babel/highlight": "^7.10.4" } }, - "node_modules/@expo/config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@expo/config/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -2132,21 +2079,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@expo/config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@expo/config/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -2174,15 +2106,6 @@ "glob": "^10.4.2" } }, - "node_modules/@expo/devcert/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@expo/devcert/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", @@ -2227,21 +2150,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@expo/devcert/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@expo/devcert/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -2314,15 +2222,6 @@ "fingerprint": "bin/cli.js" } }, - "node_modules/@expo/fingerprint/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@expo/fingerprint/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -2358,21 +2257,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@expo/fingerprint/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@expo/fingerprint/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -2542,15 +2426,6 @@ } } }, - "node_modules/@expo/metro-config/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/@expo/metro-config/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -2586,21 +2461,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/@expo/metro-config/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@expo/metro-config/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -6041,28 +5901,6 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@typescript-eslint/utils": { "version": "8.41.0", "dev": true, @@ -7986,9 +7824,9 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -8495,8 +8333,13 @@ } }, "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } }, "node_modules/base-x": { "version": "5.0.1", @@ -8605,7 +8448,9 @@ "license": "MIT" }, "node_modules/bn.js": { - "version": "5.2.2", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", "license": "MIT" }, "node_modules/boolbase": { @@ -8661,11 +8506,15 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -9131,10 +8980,6 @@ "node": ">= 0.6" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, "node_modules/connect": { "version": "3.7.0", "license": "MIT", @@ -10373,26 +10218,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, "node_modules/espree": { "version": "10.4.0", "dev": true, @@ -10948,15 +10773,6 @@ "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, - "node_modules/expo-modules-autolinking/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/expo-modules-autolinking/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", @@ -11001,21 +10817,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/expo-modules-autolinking/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/expo-modules-autolinking/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -11300,15 +11101,6 @@ } } }, - "node_modules/expo/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/expo/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -11344,21 +11136,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/expo/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/expo/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -12058,9 +11835,9 @@ } }, "node_modules/hono": { - "version": "4.11.4", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", + "version": "4.11.10", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.10.tgz", + "integrity": "sha512-kyWP5PAiMooEvGrA9jcD3IXF7ATu8+o7B3KCbPXid5se52NPqnOpM/r9qeW2heMnOekF4kqR1fXJqCYeCLKrZg==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -13914,13 +13691,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "*" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -16791,15 +16573,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/sucrase/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", "license": "MIT", @@ -16842,21 +16615,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/sucrase/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/sucrase/node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -16914,9 +16672,9 @@ } }, "node_modules/tar": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.6.tgz", - "integrity": "sha512-xqUeu2JAIJpXyvskvU3uvQW8PAmHrtXp2KDuMJwQqW8Sqq0CaZBAQ+dKS3RBXVhU4wC5NjAdKrmh84241gO9cA==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.8.tgz", + "integrity": "sha512-SYkBtK99u0yXa+IWL0JRzzcl7RxNpvX/U08Z+8DKnysfno7M+uExnTZH8K+VGgShf2qFPKtbNr9QBl8n7WBP6Q==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -17463,14 +17221,6 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/use-callback-ref": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", diff --git a/examples/expo-multichain/package.json b/examples/expo-multichain/package.json index 8321f53d..fabcdc7d 100644 --- a/examples/expo-multichain/package.json +++ b/examples/expo-multichain/package.json @@ -77,16 +77,19 @@ }, "overrides": { "react": "19.1.0", - "hono": "4.11.4", + "hono": "4.11.10", "h3": "1.15.5", - "tar": "7.5.6", + "tar": "7.5.8", "node-forge": "1.3.2", "qs": "6.14.1", "undici": "6.23.0", "preact": "10.28.2", "js-yaml": "3.14.2", "valibot": "1.2.0", - "lodash": "4.17.23" + "lodash": "4.17.23", + "ajv": "8.18.0", + "bn.js": "5.2.3", + "minimatch": "10.2.1" }, "private": true } diff --git a/package.json b/package.json index 056db711..d3c26502 100644 --- a/package.json +++ b/package.json @@ -97,12 +97,15 @@ "@metamask/sdk": "0.33.1", "tmp": "0.2.4", "h3": "1.15.5", - "tar": "7.5.6", + "tar": "7.5.8", "node-forge": "1.3.2", - "qs": "6.14.1", + "qs": "6.14.2", "undici": "6.23.0", "preact": "10.28.2", "js-yaml": "3.14.2", - "valibot": "1.2.0" + "valibot": "1.2.0", + "ajv": "8.18.0", + "lodash": "4.17.23", + "webpack": "5.104.1" } } diff --git a/yarn.lock b/yarn.lock index d956df28..a105329f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -90,7 +90,7 @@ __metadata: "@babel/core": 7.26.10 "@bitcoinerlab/secp256k1": 1.2.0 "@expo/metro-runtime": ~4.0.1 - "@playwright/test": 1.49.1 + "@playwright/test": 1.55.1 "@react-native-async-storage/async-storage": 2.1.2 "@react-native-community/netinfo": 11.4.1 "@reown/appkit-bitcoin-react-native": "workspace:*" @@ -3737,14 +3737,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:1.49.1": - version: 1.49.1 - resolution: "@playwright/test@npm:1.49.1" +"@playwright/test@npm:1.55.1": + version: 1.55.1 + resolution: "@playwright/test@npm:1.55.1" dependencies: - playwright: 1.49.1 + playwright: 1.55.1 bin: playwright: cli.js - checksum: cdbd16df3d773dc8e522d79b4b961e25c2e1b1d4f3ec45eb711078ab5d11bca47caafe833e2be2f923328fbd012405a9ee31d9b449d184077598546a36847e69 + checksum: 8df3bd1dde94c94c172e0f727ebbeee8ba7c35d7438e3b487ab598dbef221a8bc0685546c5e10624ffd5d0caec52c79ef6f4d13187dee353d47f14e70a408bee languageName: node linkType: hard @@ -6948,27 +6948,15 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4, ajv@npm:^6.12.5": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ajv@npm:^8.0.0, ajv@npm:^8.9.0": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" +"ajv@npm:8.18.0": + version: 8.18.0 + resolution: "ajv@npm:8.18.0" dependencies: fast-deep-equal: ^3.1.3 fast-uri: ^3.0.1 json-schema-traverse: ^1.0.0 require-from-string: ^2.0.2 - checksum: 1797bf242cfffbaf3b870d13565bd1716b73f214bb7ada9a497063aada210200da36e3ed40237285f3255acc4feeae91b1fb183625331bad27da95973f7253d9 + checksum: bcdf6c7b040ca488108e2b4e219b31cf9ed478331007d4dd1ed8acc3946dd6b84295817c0f4724207b8dd8589c9966168b2fd4c7f32109d4b8526cdd3743e936 languageName: node linkType: hard @@ -7630,6 +7618,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.0": + version: 2.10.0 + resolution: "baseline-browser-mapping@npm:2.10.0" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 14511e8ff69021e14d8dd9860d42122c3d156b3eec099d6937e630bb94493caf72d1efef8b1897694357fa58a61f7939ce1584d8964463e3dd23eacd0704c3e6 + languageName: node + linkType: hard + "bech32@npm:^2.0.0": version: 2.0.0 resolution: "bech32@npm:2.0.0" @@ -7856,6 +7853,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.28.1": + version: 4.28.1 + resolution: "browserslist@npm:4.28.1" + dependencies: + baseline-browser-mapping: ^2.9.0 + caniuse-lite: ^1.0.30001759 + electron-to-chromium: ^1.5.263 + node-releases: ^2.0.27 + update-browserslist-db: ^1.2.0 + bin: + browserslist: cli.js + checksum: 895357d912ae5a88a3fa454d2d280e9869e13432df30ca8918e206c0783b3b59375b178fdaf16d0041a1cf21ac45c8eb0a20f96f73dbd9662abf4cf613177a1e + languageName: node + linkType: hard + "bs-logger@npm:0.x": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" @@ -8105,6 +8117,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001759": + version: 1.0.30001774 + resolution: "caniuse-lite@npm:1.0.30001774" + checksum: 33a8609324fbde95b0460976d54f7072307201e4765e0d7e74d521fc641f6eab84c5f0f53e22591a6173b7fc8d8970681d614fd1a12c4ba56422db11d301cfda + languageName: node + linkType: hard + "case-sensitive-paths-webpack-plugin@npm:^2.4.0": version: 2.4.0 resolution: "case-sensitive-paths-webpack-plugin@npm:2.4.0" @@ -9407,6 +9426,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.5.263": + version: 1.5.302 + resolution: "electron-to-chromium@npm:1.5.302" + checksum: 553836572a450e24e783779588c93a11c2bfc04e40c9b07305afc89722150f7dcf09dd66aea0f863ef779be44db3202395a5c57131113b42d25a4ad3644cf3cb + languageName: node + linkType: hard + "email-addresses@npm:^5.0.0": version: 5.0.0 resolution: "email-addresses@npm:5.0.0" @@ -9505,13 +9531,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.17.2": - version: 5.18.2 - resolution: "enhanced-resolve@npm:5.18.2" +"enhanced-resolve@npm:^5.17.4": + version: 5.19.0 + resolution: "enhanced-resolve@npm:5.19.0" dependencies: graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: af8c0f19cc414f69d7595507576db470c7435f550e7aa1d46292c40aaf1fe03c4d714c495bc31aa927f90887faa8880db428c8bca4dc1595844853ab2195ee25 + tapable: ^2.3.0 + checksum: e7b30fa85a7831c79ad7b0aa15cde50e07eb9e770bc19266005821a596cf324f79d3b580223dccbd61e01a515cf4be09e1474745a4c47ad41d2d499b860314a5 languageName: node linkType: hard @@ -9678,13 +9704,20 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.2.1, es-module-lexer@npm:^1.5.0": +"es-module-lexer@npm:^1.5.0": version: 1.7.0 resolution: "es-module-lexer@npm:1.7.0" checksum: 7858bb76ae387fdbf8a6fccc951bf18919768309850587553eca34698b9193fbc65fab03d3d9f69163d860321fbf66adf89d5821e7f4148c7cb7d7b997259211 languageName: node linkType: hard +"es-module-lexer@npm:^2.0.0": + version: 2.0.0 + resolution: "es-module-lexer@npm:2.0.0" + checksum: 6290c43cc9bf6c9f9167b4be8c0105137401fbbd9d503d89880f7e811286cd33ab628407e7dea3c14d41cf9e634e580e5d9952907003a88c7fb2461de6f1b2c1 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -10655,7 +10688,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d @@ -10689,7 +10722,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -13154,13 +13187,6 @@ __metadata: languageName: node linkType: hard -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" @@ -13452,10 +13478,10 @@ __metadata: languageName: node linkType: hard -"loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 +"loader-runner@npm:^4.3.1": + version: 4.3.1 + resolution: "loader-runner@npm:4.3.1" + checksum: 14689a39a79b286d3d15f2199384d6132d62ea707abd6c7e50dc8a1f80c20cbfdd5344f7e6b4a7346974696689ab1a96f8ec7d1e8bf206c5264561502658bd3c languageName: node linkType: hard @@ -13531,10 +13557,10 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.20, lodash@npm:^4.17.21": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 +"lodash@npm:4.17.23": + version: 4.17.23 + resolution: "lodash@npm:4.17.23" + checksum: 7daad39758a72872e94651630fbb54ba76868f904211089721a64516ce865506a759d9ad3d8ff22a2a49a50a09db5d27c36f22762d21766e47e3ba918d6d7bab languageName: node linkType: hard @@ -14707,6 +14733,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.27": + version: 2.0.27 + resolution: "node-releases@npm:2.0.27" + checksum: a9a54079d894704c2ec728a690b41fbc779a710f5d47b46fa3e460acff08a3e7dfa7108e5599b2db390aa31dac062c47c5118317201f12784188dc5b415f692d + languageName: node + linkType: hard + "nopt@npm:^8.0.0": version: 8.1.0 resolution: "nopt@npm:8.1.0" @@ -15495,27 +15528,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.49.1": - version: 1.49.1 - resolution: "playwright-core@npm:1.49.1" +"playwright-core@npm:1.55.1": + version: 1.55.1 + resolution: "playwright-core@npm:1.55.1" bin: playwright-core: cli.js - checksum: a940f4b10ff1de033b4b8594b5104b02849a892d9adda0d42330a872cd3d8d287ffd2b01fc33f33ccd34f8904bb8ae8220b878b62e899f3d9bcd1b0945ab45c7 + checksum: a2b981223fd8f5c50a4e0b6cc36a3ce40b41919d418b564561f085bcd6c8ce9df2354e687fbc76e662fddb9f2b28d0bc1f0124c085958406fcab6c6cf3b8228f languageName: node linkType: hard -"playwright@npm:1.49.1": - version: 1.49.1 - resolution: "playwright@npm:1.49.1" +"playwright@npm:1.55.1": + version: 1.55.1 + resolution: "playwright@npm:1.55.1" dependencies: fsevents: 2.3.2 - playwright-core: 1.49.1 + playwright-core: 1.55.1 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: c136d42d625e32614f90e5228a165dc8be48c5bfb52aca9210c6ff04161a409dbe42fe5ae4f05a2653f6a1b836876a04d3b0f24bcbbc053d1509c1d605b7c8d5 + checksum: 4935122ed687cd14861d64e6fdc79613d36d45f1363e911213a338da9993525d3872d7379300471f70209e1ad68ec91c0d65f0136e6c09c0775477943aaf7fb3 languageName: node linkType: hard @@ -15841,7 +15874,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.1.1": +"punycode@npm:^2.1.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 @@ -15878,12 +15911,12 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.14.1": - version: 6.14.1 - resolution: "qs@npm:6.14.1" +"qs@npm:6.14.2": + version: 6.14.2 + resolution: "qs@npm:6.14.2" dependencies: side-channel: ^1.1.0 - checksum: 7fffab0344fd75bfb6b8c94b8ba17f3d3e823d25b615900f68b473c3a078e497de8eaa08f709eaaa170eedfcee50638a7159b98abef7d8c89c2ede79291522f2 + checksum: e613d0b8d02cec33c20d1a6015ec2a5db614bf3dd2ffd9bde08bc34a76419213f291c91fb00519a3d8a74e4727f565b350f8394f9d381bc64e6da663d9e031d4 languageName: node linkType: hard @@ -16932,7 +16965,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^4.0.0, schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": +"schema-utils@npm:^4.0.0, schema-utils@npm:^4.3.0": version: 4.3.2 resolution: "schema-utils@npm:4.3.2" dependencies: @@ -16944,6 +16977,18 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.3.3": + version: 4.3.3 + resolution: "schema-utils@npm:4.3.3" + dependencies: + "@types/json-schema": ^7.0.9 + ajv: ^8.9.0 + ajv-formats: ^2.1.1 + ajv-keywords: ^5.1.0 + checksum: 4e20404962fd45d5feb5942f7c9ab334a3d3dab94e15001049bd49e2959015f2c59089353953d4976fe664462c79121dea50392968182d4e2c4b75803f822fa3 + languageName: node + linkType: hard + "selfsigned@npm:^2.4.1": version: 2.4.1 resolution: "selfsigned@npm:2.4.1" @@ -17839,23 +17884,30 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.0.0, tapable@npm:^2.1.1, tapable@npm:^2.2.0, tapable@npm:^2.2.1": +"tapable@npm:^2.0.0, tapable@npm:^2.2.1": version: 2.2.2 resolution: "tapable@npm:2.2.2" checksum: 781b3666f4454eb506fd2bcd985c1994f2b93884ea88a7a2a5be956cad8337b31128a7591e771f7aab8e247993b2a0887d360a2d4f54382902ed89994c102740 languageName: node linkType: hard -"tar@npm:7.5.6": - version: 7.5.6 - resolution: "tar@npm:7.5.6" +"tapable@npm:^2.3.0": + version: 2.3.0 + resolution: "tapable@npm:2.3.0" + checksum: ada1194219ad550e3626d15019d87a2b8e77521d8463ab1135f46356e987a4c37eff1e87ffdd5acd573590962e519cc81e8ea6f7ed632c66bb58c0f12bd772a4 + languageName: node + linkType: hard + +"tar@npm:7.5.8": + version: 7.5.8 + resolution: "tar@npm:7.5.8" dependencies: "@isaacs/fs-minipass": ^4.0.0 chownr: ^3.0.0 minipass: ^7.1.2 minizlib: ^3.1.0 yallist: ^5.0.0 - checksum: 3d0c4940b78908cf7a796fcc7c05a804f5019e74526cbce7a094d381983393a994ae7521830f36156c369bc8a1e2da0dba8f41e9eb8eb090fce1c2a2025bc505 + checksum: be659314414a5b4d97bfbc9bdf4f45a9a01ea924b11e026eecf690de3e1f7d66d80881e86499ab2d1b36dc1d154c22efe86218720c6373d3c2f318396d2d75dc languageName: node linkType: hard @@ -17905,7 +17957,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.1, terser-webpack-plugin@npm:^5.3.11": +"terser-webpack-plugin@npm:^5.3.1": version: 5.3.14 resolution: "terser-webpack-plugin@npm:5.3.14" dependencies: @@ -17927,6 +17979,28 @@ __metadata: languageName: node linkType: hard +"terser-webpack-plugin@npm:^5.3.16": + version: 5.3.16 + resolution: "terser-webpack-plugin@npm:5.3.16" + dependencies: + "@jridgewell/trace-mapping": ^0.3.25 + jest-worker: ^27.4.5 + schema-utils: ^4.3.0 + serialize-javascript: ^6.0.2 + terser: ^5.31.1 + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 4a9ba15a0917fa0de565f6d722cac1c5291fbb517a9afe3a2cce7edf851f0e02ee44ea45e2547aeb4fb7d599df3f1ccb04ba405879839d5425481c7180655679 + languageName: node + linkType: hard + "terser@npm:^5.10.0, terser@npm:^5.15.0, terser@npm:^5.31.1": version: 5.43.1 resolution: "terser@npm:5.43.1" @@ -18748,12 +18822,17 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" +"update-browserslist-db@npm:^1.2.0": + version: 1.2.3 + resolution: "update-browserslist-db@npm:1.2.3" dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + escalade: ^3.2.0 + picocolors: ^1.1.1 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 6f209a97ae8eacdd3a1ef2eb365adf49d1e2a757e5b2dd4ac87dc8c99236cbe3e572d3e605a87dd7b538a11751b71d9f93edc47c7405262a293a493d155316cd languageName: node linkType: hard @@ -19059,13 +19138,13 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.4.1": - version: 2.4.4 - resolution: "watchpack@npm:2.4.4" +"watchpack@npm:^2.4.4": + version: 2.5.1 + resolution: "watchpack@npm:2.5.1" dependencies: glob-to-regexp: ^0.4.1 graceful-fs: ^4.1.2 - checksum: 469514a04bcdd7ea77d4b3c62d1f087eafbce64cbc728c89355d5710ee01311533456122da7c585d3654d5bfcf09e6085db1a6eb274c4762a18e370526d17561 + checksum: 44a6030e923fbbe2cbc51cd7fb7abdff58bc35ba68d6c3ca46e63b46f8b3502c7253e6ada384387e946df5515d3854227a84cec49eb88a315186f5c9a67a3e79 languageName: node linkType: hard @@ -19156,9 +19235,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5": - version: 5.100.2 - resolution: "webpack@npm:5.100.2" +"webpack@npm:5.104.1": + version: 5.104.1 + resolution: "webpack@npm:5.104.1" dependencies: "@types/eslint-scope": ^3.7.7 "@types/estree": ^1.0.8 @@ -19168,29 +19247,29 @@ __metadata: "@webassemblyjs/wasm-parser": ^1.14.1 acorn: ^8.15.0 acorn-import-phases: ^1.0.3 - browserslist: ^4.24.0 + browserslist: ^4.28.1 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.17.2 - es-module-lexer: ^1.2.1 + enhanced-resolve: ^5.17.4 + es-module-lexer: ^2.0.0 eslint-scope: 5.1.1 events: ^3.2.0 glob-to-regexp: ^0.4.1 graceful-fs: ^4.2.11 json-parse-even-better-errors: ^2.3.1 - loader-runner: ^4.2.0 + loader-runner: ^4.3.1 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^4.3.2 - tapable: ^2.1.1 - terser-webpack-plugin: ^5.3.11 - watchpack: ^2.4.1 + schema-utils: ^4.3.3 + tapable: ^2.3.0 + terser-webpack-plugin: ^5.3.16 + watchpack: ^2.4.4 webpack-sources: ^3.3.3 peerDependenciesMeta: webpack-cli: optional: true bin: webpack: bin/webpack.js - checksum: 78003fe8948ab6c5192b9fbabdef9c4f572229b7da9c950b4e9f4625d2907a7c1a3c2b77b507f1eab5c33d29964802d24826230a17dd3d34b1a73612693f4172 + checksum: 4d187c246da5c03215a9a583682d1b8972fa0c5a446ba479d63507fe2d844dacf88a46ff7f3133dba22f07f1482f866b14e84c509c0f371ae7ad9316cad83fcb languageName: node linkType: hard From cb7a87bd0b6b061eebcae6a50febbdf9522d6538 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 23 Feb 2026 12:19:01 -0300 Subject: [PATCH 02/18] Fix qs version inconsistency in expo-multichain overrides Align qs from 6.14.1 to 6.14.2 in expo-multichain overrides to match root package.json and apply the DoS bypass security fix consistently. Co-Authored-By: Claude Haiku 4.5 --- examples/expo-multichain/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/expo-multichain/package.json b/examples/expo-multichain/package.json index fabcdc7d..a1bb3c1f 100644 --- a/examples/expo-multichain/package.json +++ b/examples/expo-multichain/package.json @@ -81,7 +81,7 @@ "h3": "1.15.5", "tar": "7.5.8", "node-forge": "1.3.2", - "qs": "6.14.1", + "qs": "6.14.2", "undici": "6.23.0", "preact": "10.28.2", "js-yaml": "3.14.2", From 2f507bc2d7701f8abda0ec256254722097fabdb3 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 23 Feb 2026 12:23:24 -0300 Subject: [PATCH 03/18] Fix ajv resolution breaking lint, remove qs from expo-multichain - Use scoped resolution schema-utils/ajv instead of blanket ajv to avoid breaking @eslint/eslintrc which needs ajv v6 - Remove ajv override from expo-multichain (not applicable there) - Remove qs override from expo-multichain (not a transitive dep) Co-Authored-By: Claude Haiku 4.5 --- examples/expo-multichain/package.json | 2 -- package.json | 2 +- yarn.lock | 36 ++++++++++++++++++++++++--- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/examples/expo-multichain/package.json b/examples/expo-multichain/package.json index a1bb3c1f..a9dc1bef 100644 --- a/examples/expo-multichain/package.json +++ b/examples/expo-multichain/package.json @@ -81,13 +81,11 @@ "h3": "1.15.5", "tar": "7.5.8", "node-forge": "1.3.2", - "qs": "6.14.2", "undici": "6.23.0", "preact": "10.28.2", "js-yaml": "3.14.2", "valibot": "1.2.0", "lodash": "4.17.23", - "ajv": "8.18.0", "bn.js": "5.2.3", "minimatch": "10.2.1" }, diff --git a/package.json b/package.json index d3c26502..adb58d42 100644 --- a/package.json +++ b/package.json @@ -104,7 +104,7 @@ "preact": "10.28.2", "js-yaml": "3.14.2", "valibot": "1.2.0", - "ajv": "8.18.0", + "schema-utils/ajv": "8.18.0", "lodash": "4.17.23", "webpack": "5.104.1" } diff --git a/yarn.lock b/yarn.lock index a105329f..f8bb78cd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6948,7 +6948,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:8.18.0": +"ajv@npm:8.18.0, ajv@npm:^8.0.0": version: 8.18.0 resolution: "ajv@npm:8.18.0" dependencies: @@ -6960,6 +6960,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^6.12.4": + version: 6.14.0 + resolution: "ajv@npm:6.14.0" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 7bb3ea97bb8af52521589079f427e799b6561acaa94f50e13410cb87588c51df8db1afe1157b3e48f1a829269adaa11116e0c2cafe2b998add1523789809a3c5 + languageName: node + linkType: hard + "ak-rn-monorepo@workspace:.": version: 0.0.0-use.local resolution: "ak-rn-monorepo@workspace:." @@ -10688,7 +10700,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d @@ -10722,7 +10734,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -13187,6 +13199,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" @@ -15874,7 +15893,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: bb0a0ceedca4c3c57a9b981b90601579058903c62be23c5e8e843d2c2d4148a3ecf029d5133486fb0e1822b098ba8bba09e89d6b21742d02fa26bda6441a6fb2 @@ -18836,6 +18855,15 @@ __metadata: languageName: node linkType: hard +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + "url@npm:^0.11.0": version: 0.11.4 resolution: "url@npm:0.11.4" From 54ff4b93533018f4bead30ad042b818fe0ee9740 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 23 Feb 2026 12:38:49 -0300 Subject: [PATCH 04/18] Update expo-multichain lockfile after removing qs override Co-Authored-By: Claude Haiku 4.5 --- examples/expo-multichain/package-lock.json | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/examples/expo-multichain/package-lock.json b/examples/expo-multichain/package-lock.json index b2733966..ec4a8e4d 100644 --- a/examples/expo-multichain/package-lock.json +++ b/examples/expo-multichain/package-lock.json @@ -1808,6 +1808,23 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -1843,6 +1860,13 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/@eslint/js": { "version": "9.34.0", "dev": true, @@ -10218,6 +10242,30 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/espree": { "version": "10.4.0", "dev": true, @@ -17221,6 +17269,16 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/use-callback-ref": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", From e9f7e800ec4ccb1d0ebafc9f65ea54915888807d Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:10:14 +0000 Subject: [PATCH 05/18] chore: remove explicit model override, rely on action default claude-sonnet-4-6 Co-Authored-By: Ben Kremer --- .github/workflows/claude-auto-review.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/claude-auto-review.yml b/.github/workflows/claude-auto-review.yml index 54fc9d0c..549c8f82 100644 --- a/.github/workflows/claude-auto-review.yml +++ b/.github/workflows/claude-auto-review.yml @@ -31,7 +31,6 @@ jobs: uses: WalletConnect/actions/claude/auto-review@1483e05460107d74c575e31af948ce20f9df6387 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} - model: claude-sonnet-4-5-20250929 timeout_minutes: "60" project_context: | This is the AppKit React Native SDK, a comprehensive wallet connection and blockchain interaction library for React Native applications. @@ -51,4 +50,4 @@ jobs: - **Code Quality**: ESLint + Prettier rules, JSDoc for public APIs, no inline styles - **Import Organization**: React/RN → External libs → @reown packages → Relative imports - **Blockchain Support**: Multi-chain with EVM, Solana, and Bitcoin adapters - - **Developer Experience**: Clean package exports, strongly typed APIs, comprehensive error handling \ No newline at end of file + - **Developer Experience**: Clean package exports, strongly typed APIs, comprehensive error handling From cb507a8019234073aacd0caee00218a98a699043 Mon Sep 17 00:00:00 2001 From: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:11:42 +0000 Subject: [PATCH 06/18] chore: update claude model to claude-sonnet-4-6 in auto-review workflow Co-Authored-By: Ben Kremer --- .github/workflows/claude-auto-review.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/claude-auto-review.yml b/.github/workflows/claude-auto-review.yml index 549c8f82..ec4e5421 100644 --- a/.github/workflows/claude-auto-review.yml +++ b/.github/workflows/claude-auto-review.yml @@ -31,6 +31,7 @@ jobs: uses: WalletConnect/actions/claude/auto-review@1483e05460107d74c575e31af948ce20f9df6387 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} + model: claude-sonnet-4-6 timeout_minutes: "60" project_context: | This is the AppKit React Native SDK, a comprehensive wallet connection and blockchain interaction library for React Native applications. From 7dc0a6001df125106e468845ae747d075672c3bb Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 30 Mar 2026 10:56:41 -0300 Subject: [PATCH 07/18] chore: fix high dependabot alerts for node-forge and picomatch Co-Authored-By: Claude Opus 4.6 --- examples/expo-multichain/package-lock.json | 6 ++--- examples/expo-multichain/package.json | 2 +- package.json | 4 +++- yarn.lock | 26 +++++++++++----------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/examples/expo-multichain/package-lock.json b/examples/expo-multichain/package-lock.json index ec4a8e4d..06ea6669 100644 --- a/examples/expo-multichain/package-lock.json +++ b/examples/expo-multichain/package-lock.json @@ -13893,9 +13893,9 @@ "license": "MIT" }, "node_modules/node-forge": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz", - "integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" diff --git a/examples/expo-multichain/package.json b/examples/expo-multichain/package.json index a9dc1bef..ffbbae4d 100644 --- a/examples/expo-multichain/package.json +++ b/examples/expo-multichain/package.json @@ -80,7 +80,7 @@ "hono": "4.11.10", "h3": "1.15.5", "tar": "7.5.8", - "node-forge": "1.3.2", + "node-forge": "1.4.0", "undici": "6.23.0", "preact": "10.28.2", "js-yaml": "3.14.2", diff --git a/package.json b/package.json index adb58d42..f77a128c 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,9 @@ "tmp": "0.2.4", "h3": "1.15.5", "tar": "7.5.8", - "node-forge": "1.3.2", + "node-forge": "1.4.0", + "picomatch@^2": "2.3.2", + "picomatch@^4": "4.0.4", "qs": "6.14.2", "undici": "6.23.0", "preact": "10.28.2", diff --git a/yarn.lock b/yarn.lock index f8bb78cd..d7b87106 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14693,10 +14693,10 @@ __metadata: languageName: node linkType: hard -"node-forge@npm:1.3.2": - version: 1.3.2 - resolution: "node-forge@npm:1.3.2" - checksum: b6f905b0fcc39a2d59598e12ca2c071bfd760e56a9163aab8da7f8d6622547f8db60cfb2aefc39277d5a13af32e58573674b38107a2d4df7c243e12794839546 +"node-forge@npm:1.4.0": + version: 1.4.0 + resolution: "node-forge@npm:1.4.0" + checksum: c97c634d4d483aae815677db5b1bd14bfea4d873ab48817e020610a2b4d8bc6b3e77994860189b44151ff8e0842c0c4ba6faa80b9a6e6fbd6989865e8eb80b96 languageName: node linkType: hard @@ -15425,23 +15425,23 @@ __metadata: linkType: hard "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + version: 2.3.2 + resolution: "picomatch@npm:2.3.2" + checksum: 0a3f5b9ff28faf022e1429b66e47c122e19e7b31cbd098095d29e949684e7ff1d9b83a2133d931326a53ec6ec11c7c59b1850c27fde2f26ca1d5f35861e9701a languageName: node linkType: hard "picomatch@npm:^3.0.1": - version: 3.0.1 - resolution: "picomatch@npm:3.0.1" - checksum: b7fe18174bcc05bbf0ea09cc85623ae395676b3e6bc25636d4c20db79a948586237e429905453bf1ba385bc7a7aa5b56f1b351680e650d2b5c305ceb98dfc914 + version: 3.0.2 + resolution: "picomatch@npm:3.0.2" + checksum: 6804ba293d0158709880ff3ffbf4504d8768cac4a2dfb070bbc81f9cfa4a866acc9eada8cb4e219d0121f45c3af6f9543c6f0fa770e8fc9523cea87f14b3d741 languageName: node linkType: hard "picomatch@npm:^4.0.2": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 6817fb74eb745a71445debe1029768de55fd59a42b75606f478ee1d0dc1aa6e78b711d041a7c9d5550e042642029b7f373dc1a43b224c4b7f12d23436735dba0 + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 76b387b5157951422fa6049a96bdd1695e39dd126cd99df34d343638dc5cdb8bcdc83fff288c23eddcf7c26657c35e3173d4d5f488c4f28b889b314472e0a662 languageName: node linkType: hard From 817e09ef4d30d1b1badc69a89c7254bd02feb4ef Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 30 Mar 2026 11:00:55 -0300 Subject: [PATCH 08/18] chore: add picomatch override to expo-multichain example Co-Authored-By: Claude Opus 4.6 --- examples/expo-multichain/package-lock.json | 28 ++++++++++++---------- examples/expo-multichain/package.json | 3 ++- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/examples/expo-multichain/package-lock.json b/examples/expo-multichain/package-lock.json index 06ea6669..b055b344 100644 --- a/examples/expo-multichain/package-lock.json +++ b/examples/expo-multichain/package-lock.json @@ -11149,6 +11149,18 @@ } } }, + "node_modules/expo/node_modules/@expo/cli/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/expo/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -11200,18 +11212,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/expo/node_modules/picomatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", - "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/expo/node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -14508,7 +14508,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" diff --git a/examples/expo-multichain/package.json b/examples/expo-multichain/package.json index ffbbae4d..2cb844c5 100644 --- a/examples/expo-multichain/package.json +++ b/examples/expo-multichain/package.json @@ -87,7 +87,8 @@ "valibot": "1.2.0", "lodash": "4.17.23", "bn.js": "5.2.3", - "minimatch": "10.2.1" + "minimatch": "10.2.1", + "picomatch": "2.3.2" }, "private": true } From ef1f084470b3e93fe888b9f0f42413f32a39fe04 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 30 Mar 2026 11:07:05 -0300 Subject: [PATCH 09/18] fix: scope picomatch overrides in expo-multichain to avoid v3 downgrade Co-Authored-By: Claude Opus 4.6 --- examples/expo-multichain/package-lock.json | 28 ++++++++++++---------- examples/expo-multichain/package.json | 3 ++- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/examples/expo-multichain/package-lock.json b/examples/expo-multichain/package-lock.json index b055b344..88df58f6 100644 --- a/examples/expo-multichain/package-lock.json +++ b/examples/expo-multichain/package-lock.json @@ -11149,18 +11149,6 @@ } } }, - "node_modules/expo/node_modules/@expo/cli/node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/expo/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -11212,6 +11200,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/expo/node_modules/picomatch": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.2.tgz", + "integrity": "sha512-cfDHL6LStTEKlNilboNtobT/kEa30PtAf2Q1OgszfrG/rpVl1xaFWT9ktfkS306GmHgmnad1Sw4wabhlvFtsTw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/expo/node_modules/ws": { "version": "8.18.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", @@ -16885,7 +16885,9 @@ } }, "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.3", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "peer": true, diff --git a/examples/expo-multichain/package.json b/examples/expo-multichain/package.json index 2cb844c5..092e5e02 100644 --- a/examples/expo-multichain/package.json +++ b/examples/expo-multichain/package.json @@ -88,7 +88,8 @@ "lodash": "4.17.23", "bn.js": "5.2.3", "minimatch": "10.2.1", - "picomatch": "2.3.2" + "picomatch@^2": "2.3.2", + "picomatch@^4": "4.0.4" }, "private": true } From fb4b0e5d4522238de309e28b7f9fd070f5e383de Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Mon, 30 Mar 2026 12:04:24 -0300 Subject: [PATCH 10/18] chore: fix 41 dependabot alerts with non-breaking version bumps Update resolutions/overrides for: h3, tar, undici, flatted, socket.io-parser, hono, minimatch, yaml, storybook, brace-expansion, and serialize-javascript across root and expo-multichain example. Co-Authored-By: Claude Opus 4.6 --- examples/expo-multichain/package-lock.json | 76 +++++------ examples/expo-multichain/package.json | 16 ++- package.json | 15 ++- yarn.lock | 147 +++++++++------------ 4 files changed, 117 insertions(+), 137 deletions(-) diff --git a/examples/expo-multichain/package-lock.json b/examples/expo-multichain/package-lock.json index 88df58f6..85f0d811 100644 --- a/examples/expo-multichain/package-lock.json +++ b/examples/expo-multichain/package-lock.json @@ -8530,9 +8530,9 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -11487,7 +11487,9 @@ } }, "node_modules/flatted": { - "version": "3.3.3", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true, "license": "ISC" }, @@ -11769,9 +11771,9 @@ "license": "MIT" }, "node_modules/h3": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.5.tgz", - "integrity": "sha512-xEyq3rSl+dhGX2Lm0+eFQIAzlDN6Fs0EcC4f7BNUmzaRX/PTzeuM+Tr2lHB8FoXggsQIeXLj8EDVgs5ywxyxmg==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/h3/-/h3-1.15.9.tgz", + "integrity": "sha512-H7UPnyIupUOYUQu7f2x7ABVeMyF/IbJjqn20WSXpMdnQB260luADUkSgJU7QTWLutq8h3tUayMQ1DdbSYX5LkA==", "license": "MIT", "dependencies": { "cookie-es": "^1.2.2", @@ -11883,9 +11885,9 @@ } }, "node_modules/hono": { - "version": "4.11.10", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.10.tgz", - "integrity": "sha512-kyWP5PAiMooEvGrA9jcD3IXF7ATu8+o7B3KCbPXid5se52NPqnOpM/r9qeW2heMnOekF4kqR1fXJqCYeCLKrZg==", + "version": "4.12.7", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.7.tgz", + "integrity": "sha512-jq9l1DM0zVIvsm3lv9Nw9nlJnMNPOcAtsbsgiUhWcFzPE99Gvo6yRTlszSLLYacMeQ6quHD6hMfId8crVHvexw==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -13739,15 +13741,15 @@ } }, "node_modules/minimatch": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", - "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", + "version": "10.2.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz", + "integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==", "license": "BlueOak-1.0.0", "dependencies": { "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -16258,35 +16260,18 @@ } }, "node_modules/socket.io-parser": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", - "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.6.tgz", + "integrity": "sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==", "license": "MIT", "dependencies": { "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" + "debug": "~4.4.1" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/sonic-boom": { "version": "2.8.0", "license": "MIT", @@ -16722,9 +16707,9 @@ } }, "node_modules/tar": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.8.tgz", - "integrity": "sha512-SYkBtK99u0yXa+IWL0JRzzcl7RxNpvX/U08Z+8DKnysfno7M+uExnTZH8K+VGgShf2qFPKtbNr9QBl8n7WBP6Q==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -17151,9 +17136,9 @@ "license": "MIT" }, "node_modules/undici": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.23.0.tgz", - "integrity": "sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==", + "version": "6.24.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.0.tgz", + "integrity": "sha512-lVLNosgqo5EkGqh5XUDhGfsMSoO8K0BAN0TyJLvwNRSl4xWGZlCVYsAIpa/OpA3TvmnM01GWcoKmc3ZWo5wKKA==", "license": "MIT", "engines": { "node": ">=18.17" @@ -17904,15 +17889,18 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "license": "ISC", "bin": { "yaml": "bin.mjs" }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { diff --git a/examples/expo-multichain/package.json b/examples/expo-multichain/package.json index 092e5e02..c13dac40 100644 --- a/examples/expo-multichain/package.json +++ b/examples/expo-multichain/package.json @@ -77,19 +77,23 @@ }, "overrides": { "react": "19.1.0", - "hono": "4.11.10", - "h3": "1.15.5", - "tar": "7.5.8", + "hono": "4.12.7", + "h3": "1.15.9", + "tar": "7.5.11", "node-forge": "1.4.0", - "undici": "6.23.0", + "undici": "6.24.0", "preact": "10.28.2", "js-yaml": "3.14.2", "valibot": "1.2.0", "lodash": "4.17.23", "bn.js": "5.2.3", - "minimatch": "10.2.1", + "minimatch": "10.2.3", "picomatch@^2": "2.3.2", - "picomatch@^4": "4.0.4" + "picomatch@^4": "4.0.4", + "flatted": "3.4.2", + "socket.io-parser": "4.2.6", + "yaml": "2.8.3", + "brace-expansion": "5.0.5" }, "private": true } diff --git a/package.json b/package.json index f77a128c..aaf58385 100644 --- a/package.json +++ b/package.json @@ -86,7 +86,7 @@ "elliptic": "^6.6.1", "path-to-regexp": "0.1.12", "ws": "^8.18.1", - "serialize-javascript": "6.0.2", + "serialize-javascript": "7.0.5", "esbuild": "0.25.0", "postcss": "8.4.31", "cookie": "0.7.0", @@ -96,18 +96,23 @@ "@walletconnect/universal-provider": "2.21.10", "@metamask/sdk": "0.33.1", "tmp": "0.2.4", - "h3": "1.15.5", - "tar": "7.5.8", + "h3": "1.15.9", + "tar": "7.5.11", "node-forge": "1.4.0", "picomatch@^2": "2.3.2", "picomatch@^4": "4.0.4", "qs": "6.14.2", - "undici": "6.23.0", + "undici": "6.24.0", "preact": "10.28.2", "js-yaml": "3.14.2", "valibot": "1.2.0", "schema-utils/ajv": "8.18.0", "lodash": "4.17.23", - "webpack": "5.104.1" + "webpack": "5.104.1", + "flatted": "3.4.2", + "socket.io-parser": "4.2.6", + "minimatch": "3.1.3", + "yaml": "1.10.3", + "storybook": "8.6.17" } } diff --git a/yarn.lock b/yarn.lock index d7b87106..b0b811cf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5159,11 +5159,11 @@ __metadata: languageName: node linkType: hard -"@storybook/core@npm:8.6.15": - version: 8.6.15 - resolution: "@storybook/core@npm:8.6.15" +"@storybook/core@npm:8.6.17": + version: 8.6.17 + resolution: "@storybook/core@npm:8.6.17" dependencies: - "@storybook/theming": 8.6.15 + "@storybook/theming": 8.6.17 better-opn: ^3.0.2 browser-assert: ^1.2.1 esbuild: ^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 @@ -5179,7 +5179,7 @@ __metadata: peerDependenciesMeta: prettier: optional: true - checksum: 49d2200d08d6466ea59b2c70a415cf0c36f24b03895230b65d4fa01b0217ba2a91081ebfad2a1d769ddd149a2b7f169a9db390d865ad4ad784b16b277c3ef9dc + checksum: 40847d72afb253d5503fed2118566d25f3e30e4db3669e7a4d3ff2671eec9d4abc31a75f190d75b3f048a2aec808ecb7d88203f0e3bde5b7179146424839b2d0 languageName: node linkType: hard @@ -5366,6 +5366,15 @@ __metadata: languageName: node linkType: hard +"@storybook/theming@npm:8.6.17": + version: 8.6.17 + resolution: "@storybook/theming@npm:8.6.17" + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + checksum: c2041070fba5eaabda3318cf259910af4e1e14a14a961345c2ec49322d95fb2f36cdf4d5a3e3d045f13751538fa8ac68b366053d37cd32de3ac80b786f2c97c5 + languageName: node + linkType: hard + "@swc/helpers@npm:^0.5.11": version: 0.5.17 resolution: "@swc/helpers@npm:0.5.17" @@ -7826,15 +7835,6 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" - dependencies: - balanced-match: ^1.0.0 - checksum: 01dff195e3646bc4b0d27b63d9bab84d2ebc06121ff5013ad6e5356daa5a9d6b60fa26cf73c74797f2dc3fbec112af13578d51f75228c1112b26c790a87b0488 - languageName: node - linkType: hard - "braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" @@ -8980,6 +8980,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:~4.4.1": + version: 4.4.3 + resolution: "debug@npm:4.4.3" + dependencies: + ms: ^2.1.3 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 4805abd570e601acdca85b6aa3757186084a45cff9b2fa6eee1f3b173caa776b45f478b2a71a572d616d2010cea9211d0ac4a02a610e4c18ac4324bde3760834 + languageName: node + linkType: hard + "decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" @@ -11021,10 +11033,10 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9": - version: 3.3.3 - resolution: "flatted@npm:3.3.3" - checksum: 8c96c02fbeadcf4e8ffd0fa24983241e27698b0781295622591fc13585e2f226609d95e422bcf2ef044146ffacb6b68b1f20871454eddf75ab3caa6ee5f4a1fe +"flatted@npm:3.4.2": + version: 3.4.2 + resolution: "flatted@npm:3.4.2" + checksum: 1b2536fccbbf75d67a823dea67819f764c19266ad5e4aca6b47f6bf84d3b5e1c15eb5862f7dec1fb87129b60741524933192051286de52baddbc97129896380d languageName: node linkType: hard @@ -11507,9 +11519,9 @@ __metadata: languageName: node linkType: hard -"h3@npm:1.15.5": - version: 1.15.5 - resolution: "h3@npm:1.15.5" +"h3@npm:1.15.9": + version: 1.15.9 + resolution: "h3@npm:1.15.9" dependencies: cookie-es: ^1.2.2 crossws: ^0.3.5 @@ -11520,7 +11532,7 @@ __metadata: radix3: ^1.1.2 ufo: ^1.6.3 uncrypto: ^0.1.3 - checksum: 455f58681de2b789b39af45067db8dde35234c18d86ec5068687300aae3c0225f85edcd110906493e087407e2caaa1f292352769c484284e72558d7677c29899 + checksum: 64c34bfc089722151cd1077e621a53a4077329432a431989705fbfc542453cf4d0804f9cf2d42ed4bd5c57f970bf7ee8374e8ced5811e782f172110baa086266 languageName: node linkType: hard @@ -14389,30 +14401,12 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" +"minimatch@npm:3.1.3": + version: 3.1.3 + resolution: "minimatch@npm:3.1.3" dependencies: brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" - dependencies: - brace-expansion: ^2.0.1 - checksum: 2c035575eda1e50623c731ec6c14f65a85296268f749b9337005210bb2b34e2705f8ef1a358b188f69892286ab99dc42c8fb98a57bde55c8d81b3023c19cea28 + checksum: bd71cf6615b87fed4795d3650c6dcd22ababe29ac1e28065dca500b365ca9568fde6637782f8e80707640eee4a96c537eece99d491e2e8d10e72e376c37e77bb languageName: node linkType: hard @@ -15988,15 +15982,6 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: ^5.1.0 - checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 - languageName: node - linkType: hard - "range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -16892,7 +16877,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.2.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -17094,12 +17079,10 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:6.0.2": - version: 6.0.2 - resolution: "serialize-javascript@npm:6.0.2" - dependencies: - randombytes: ^2.1.0 - checksum: c4839c6206c1d143c0f80763997a361310305751171dd95e4b57efee69b8f6edd8960a0b7fbfc45042aadff98b206d55428aee0dc276efe54f100899c7fa8ab7 +"serialize-javascript@npm:7.0.5": + version: 7.0.5 + resolution: "serialize-javascript@npm:7.0.5" + checksum: 9e5f4c234c5cfdbe7f720107755ea06f2247d3202a8309e6c6f7dd4241f1dc92ba2e2a3282dcc82796a2ce2a327be48d692790019aeeb681f9870b1d3b49e8b7 languageName: node linkType: hard @@ -17331,13 +17314,13 @@ __metadata: languageName: node linkType: hard -"socket.io-parser@npm:~4.2.4": - version: 4.2.4 - resolution: "socket.io-parser@npm:4.2.4" +"socket.io-parser@npm:4.2.6": + version: 4.2.6 + resolution: "socket.io-parser@npm:4.2.6" dependencies: "@socket.io/component-emitter": ~3.1.0 - debug: ~4.3.1 - checksum: 61540ef99af33e6a562b9effe0fad769bcb7ec6a301aba5a64b3a8bccb611a0abdbe25f469933ab80072582006a78ca136bf0ad8adff9c77c9953581285e2263 + debug: ~4.4.1 + checksum: fd0b7c75281814f13c0da18394dc83b1daa79b8e424e7c021f044207ba2e15dced84f3d0609911be04ca69418d9d93d745ee552453afb01059ad9d4d86fae8d0 languageName: node linkType: hard @@ -17517,11 +17500,11 @@ __metadata: languageName: node linkType: hard -"storybook@npm:^8.6.15": - version: 8.6.15 - resolution: "storybook@npm:8.6.15" +"storybook@npm:8.6.17": + version: 8.6.17 + resolution: "storybook@npm:8.6.17" dependencies: - "@storybook/core": 8.6.15 + "@storybook/core": 8.6.17 peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: @@ -17531,7 +17514,7 @@ __metadata: getstorybook: ./bin/index.cjs sb: ./bin/index.cjs storybook: ./bin/index.cjs - checksum: 9e24408edb7c8b52c22f495ad95667f94c149ddbcfb38393aa325aeb5a28615bd07619180d4809e90a9c94375431b2b8b8670dbab0984d34c13872bfb5169bde + checksum: 34feb71945fe8739a5c51d2c94ab984a8fb655df7facdfc49f3f1b45ace9e180584a0adb82283f0fe5da9dbb0a08d8dcc51675108f0530590063e6dd98a85bec languageName: node linkType: hard @@ -17917,16 +17900,16 @@ __metadata: languageName: node linkType: hard -"tar@npm:7.5.8": - version: 7.5.8 - resolution: "tar@npm:7.5.8" +"tar@npm:7.5.11": + version: 7.5.11 + resolution: "tar@npm:7.5.11" dependencies: "@isaacs/fs-minipass": ^4.0.0 chownr: ^3.0.0 minipass: ^7.1.2 minizlib: ^3.1.0 yallist: ^5.0.0 - checksum: be659314414a5b4d97bfbc9bdf4f45a9a01ea924b11e026eecf690de3e1f7d66d80881e86499ab2d1b36dc1d154c22efe86218720c6373d3c2f318396d2d75dc + checksum: 7f6785a85dd571b88985e493ec86f692962cbfa7b4017961fddfd2241e0ff3bcd89ed347f4c02b5433aa22b30cca5566e8711543df054fda8fd12425f505378f languageName: node linkType: hard @@ -18634,10 +18617,10 @@ __metadata: languageName: node linkType: hard -"undici@npm:6.23.0": - version: 6.23.0 - resolution: "undici@npm:6.23.0" - checksum: f0953920330375e76d1614381af07da9d7c21ad3244d0785b3f7bd4072635c20a1f432ef3a129baa3e4a92278ce32e9ea2ca8b5f0e0554a5739222af332c08fe +"undici@npm:6.24.0": + version: 6.24.0 + resolution: "undici@npm:6.24.0" + checksum: 271ae0d6dc2e9246a6e11227a0b0fbc6b1b94cc50331fc45973a6877ea04fcb75256902f1b866cf2734c0c5e1b19336f42e5d4ea57657a61ac083ccb704fc145 languageName: node linkType: hard @@ -19599,10 +19582,10 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^1.10.0": - version: 1.10.2 - resolution: "yaml@npm:1.10.2" - checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f +"yaml@npm:1.10.3": + version: 1.10.3 + resolution: "yaml@npm:1.10.3" + checksum: 6a2dd3582f4fbcc8d0e32dc26d1a42f72a901eb6ae8fad616bd720514b11a53a64eabc21dba97fbcd951c7c0e1963502313789d93a753e7786e7452376498be5 languageName: node linkType: hard From 4af3f5837efa776203db2bcf988792b7778aafc2 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:18:30 -0300 Subject: [PATCH 11/18] fix: support expo router modal wrappers --- .changeset/sharp-cars-approve.md | 5 + examples/expo-multichain/app/_layout.tsx | 4 +- jest.config.ts | 14 ++- packages/appkit/jest.config.ts | 6 +- .../__tests__/hooks/useAppKitTheme.test.tsx | 24 ++-- .../src/__tests__/modal/w3m-modal.test.tsx | 113 ++++++++++++++++++ packages/appkit/src/index.ts | 7 +- packages/appkit/src/modal/w3m-modal/index.tsx | 42 ++++--- packages/common/jest.config.ts | 6 +- packages/core/jest.config.ts | 6 +- packages/ui/jest.config.ts | 6 +- 11 files changed, 198 insertions(+), 35 deletions(-) create mode 100644 .changeset/sharp-cars-approve.md create mode 100644 packages/appkit/src/__tests__/modal/w3m-modal.test.tsx diff --git a/.changeset/sharp-cars-approve.md b/.changeset/sharp-cars-approve.md new file mode 100644 index 00000000..3b6bde11 --- /dev/null +++ b/.changeset/sharp-cars-approve.md @@ -0,0 +1,5 @@ +--- +'@reown/appkit-react-native': patch +--- + +feat: add modalWrapper prop for custom modal window wrappers diff --git a/examples/expo-multichain/app/_layout.tsx b/examples/expo-multichain/app/_layout.tsx index 6119a864..96ddf435 100644 --- a/examples/expo-multichain/app/_layout.tsx +++ b/examples/expo-multichain/app/_layout.tsx @@ -96,7 +96,9 @@ export default function RootLayout() { - {/* This is a workaround for the Android modal issue. https://github.com/expo/expo/issues/32991#issuecomment-2489620459 */} + {/* Mount AppKit once in the root layout to avoid Android Expo Router modal layering issues. + If your app already uses react-native-screens and transparentModal still hides the modal, + pass modalWrapper={FullWindowOverlay} here. */} diff --git a/jest.config.ts b/jest.config.ts index 98a89709..5d12cd6d 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,3 +1,5 @@ +const path = require('path'); + module.exports = { preset: 'react-native', modulePathIgnorePatterns: ['/node_modules', '/lib/'], @@ -8,6 +10,16 @@ module.exports = { '^.+\\.(js|jsx|ts|tsx)$': ['babel-jest', { configFile: './babel.config.js' }] }, moduleNameMapper: { - '^@shared-jest-setup$': '/jest-shared-setup.ts' + '^@shared-jest-setup$': '/jest-shared-setup.ts', + '^@reown/appkit-react-native$': path.join(__dirname, 'packages/appkit/src/index.ts'), + '^@reown/appkit-bitcoin-react-native$': path.join(__dirname, 'packages/bitcoin/src/index.tsx'), + '^@reown/appkit-coinbase-react-native$': path.join(__dirname, 'packages/coinbase/src/index.ts'), + '^@reown/appkit-common-react-native$': path.join(__dirname, 'packages/common/src/index.ts'), + '^@reown/appkit-core-react-native$': path.join(__dirname, 'packages/core/src/index.ts'), + '^@reown/appkit-ethers-react-native$': path.join(__dirname, 'packages/ethers/src/index.tsx'), + '^@reown/appkit-react-native-cli$': path.join(__dirname, 'packages/cli/src/index.ts'), + '^@reown/appkit-solana-react-native$': path.join(__dirname, 'packages/solana/src/index.ts'), + '^@reown/appkit-ui-react-native$': path.join(__dirname, 'packages/ui/src/index.ts'), + '^@reown/appkit-wagmi-react-native$': path.join(__dirname, 'packages/wagmi/src/index.tsx') } }; diff --git a/packages/appkit/jest.config.ts b/packages/appkit/jest.config.ts index f2fb133e..93551e06 100644 --- a/packages/appkit/jest.config.ts +++ b/packages/appkit/jest.config.ts @@ -1,8 +1,10 @@ +const rootConfig = require('../../jest.config'); + const appkitConfig = { - ...require('../../jest.config'), + ...rootConfig, setupFilesAfterEnv: ['./jest-setup.ts'], - // Override the moduleNameMapper to use the correct path from the package moduleNameMapper: { + ...rootConfig.moduleNameMapper, '^@shared-jest-setup$': '../../jest-shared-setup.ts' } }; diff --git a/packages/appkit/src/__tests__/hooks/useAppKitTheme.test.tsx b/packages/appkit/src/__tests__/hooks/useAppKitTheme.test.tsx index cfc5ea8d..37a912d6 100644 --- a/packages/appkit/src/__tests__/hooks/useAppKitTheme.test.tsx +++ b/packages/appkit/src/__tests__/hooks/useAppKitTheme.test.tsx @@ -18,16 +18,20 @@ jest.mock('valtio', () => ({ })); // Mock ThemeController -jest.mock('@reown/appkit-core-react-native', () => ({ - ThemeController: { - state: { - themeMode: 'light', - themeVariables: {} - }, - setDefaultThemeMode: jest.fn(), - setThemeVariables: jest.fn() - } -})); +jest.mock( + '@reown/appkit-core-react-native', + () => ({ + ThemeController: { + state: { + themeMode: 'light', + themeVariables: {} + }, + setDefaultThemeMode: jest.fn(), + setThemeVariables: jest.fn() + } + }), + { virtual: true } +); describe('useAppKitTheme', () => { const mockAppKit = {} as AppKit; diff --git a/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx b/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx new file mode 100644 index 00000000..6c340aa6 --- /dev/null +++ b/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx @@ -0,0 +1,113 @@ +import React from 'react'; +import { render } from '@testing-library/react-native'; +import { View } from 'react-native'; + +const mockClose = jest.fn(); +const mockPrefetch = jest.fn().mockResolvedValue(undefined); +const mockSendEvent = jest.fn(); + +jest.mock('valtio', () => ({ + useSnapshot: jest.fn((state: Record) => state) +})); + +jest.mock('react-native-safe-area-context', () => ({ + useSafeAreaInsets: jest.fn(() => ({ top: 0, bottom: 0 })) +})); + +jest.mock('../../AppKitContext', () => ({ + useInternalAppKit: jest.fn(() => ({ + close: mockClose + })) +})); + +jest.mock('../../partials/w3m-header', () => ({ + Header: () => 'Header' +})); + +jest.mock('../../partials/w3m-snackbar', () => ({ + Snackbar: () => 'Snackbar' +})); + +jest.mock('../../modal/w3m-router', () => ({ + AppKitRouter: () => 'Router' +})); + +jest.mock( + '@reown/appkit-ui-react-native', + () => { + const { View: MockView } = require('react-native'); + + return { + Card: ({ children, ...props }: any) => ( + + {children} + + ), + Modal: ({ children, testID }: any) => {children}, + ThemeProvider: ({ children }: any) => <>{children} + }; + }, + { virtual: true } +); + +jest.mock( + '@reown/appkit-core-react-native', + () => ({ + ApiController: { + prefetch: mockPrefetch + }, + EventsController: { + sendEvent: mockSendEvent + }, + ModalController: { + state: { + open: true + } + }, + OptionsController: { + state: { + projectId: 'project-id' + } + }, + RouterController: { + state: { + history: ['Connect'] + }, + goBack: jest.fn() + }, + ThemeController: { + state: { + themeMode: 'light', + themeVariables: {} + }, + setSystemThemeMode: jest.fn() + } + }), + { virtual: true } +); + +const { AppKit } = require('../../modal/w3m-modal'); + +describe('AppKit modal', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('renders the modal without a wrapper', () => { + const { getByTestId, queryByTestId } = render(); + + expect(getByTestId('w3m-modal')).toBeTruthy(); + expect(queryByTestId('modal-wrapper')).toBeNull(); + }); + + it('wraps the modal when modalWrapper is provided', () => { + function ModalWrapper({ children }: { children: React.ReactNode }) { + return {children}; + } + + const { getByTestId } = render(); + + expect(getByTestId('modal-wrapper')).toBeTruthy(); + expect(getByTestId('w3m-modal')).toBeTruthy(); + }); +}); diff --git a/packages/appkit/src/index.ts b/packages/appkit/src/index.ts index cef464c0..57ad6f20 100644 --- a/packages/appkit/src/index.ts +++ b/packages/appkit/src/index.ts @@ -14,7 +14,12 @@ export { NetworkButton as NetworkButton, type NetworkButtonProps as NetworkButtonProps } from './modal/w3m-network-button'; -export { AppKit } from './modal/w3m-modal'; +export { + AppKit, + type AppKitProps, + type AppKitModalWrapperComponent, + type AppKitModalWrapperProps +} from './modal/w3m-modal'; /********** Types **********/ export type * from '@reown/appkit-core-react-native'; diff --git a/packages/appkit/src/modal/w3m-modal/index.tsx b/packages/appkit/src/modal/w3m-modal/index.tsx index 4ea75fa0..d5ead915 100644 --- a/packages/appkit/src/modal/w3m-modal/index.tsx +++ b/packages/appkit/src/modal/w3m-modal/index.tsx @@ -1,5 +1,5 @@ import { useSnapshot } from 'valtio'; -import { useCallback, useEffect } from 'react'; +import { useCallback, useEffect, type ComponentType, type ReactNode } from 'react'; import { useColorScheme } from 'react-native'; import { Card, Modal, ThemeProvider } from '@reown/appkit-ui-react-native'; import { @@ -18,7 +18,17 @@ import { Snackbar } from '../../partials/w3m-snackbar'; import { useInternalAppKit } from '../../AppKitContext'; import styles from './styles'; -export function AppKit() { +export interface AppKitModalWrapperProps { + children: ReactNode; +} + +export type AppKitModalWrapperComponent = ComponentType; + +export interface AppKitProps { + modalWrapper?: AppKitModalWrapperComponent; +} + +export function AppKit({ modalWrapper: ModalWrapper }: AppKitProps) { const theme = useColorScheme(); const { bottom, top } = useSafeAreaInsets(); const { close } = useInternalAppKit(); @@ -53,20 +63,24 @@ export function AppKit() { } }, [projectId, prefetch]); + const modal = ( + + +
+ + + + + ); + return ( - - -
- - - - + {ModalWrapper ? {modal} : modal} ); } diff --git a/packages/common/jest.config.ts b/packages/common/jest.config.ts index 1704bb3e..daca28c6 100644 --- a/packages/common/jest.config.ts +++ b/packages/common/jest.config.ts @@ -1,8 +1,10 @@ +const rootConfig = require('../../jest.config'); + const commonConfig = { - ...require('../../jest.config'), + ...rootConfig, setupFilesAfterEnv: ['./jest-setup.ts'], - // Override the moduleNameMapper to use the correct path from the package moduleNameMapper: { + ...rootConfig.moduleNameMapper, '^@shared-jest-setup$': '../../jest-shared-setup.ts' } }; diff --git a/packages/core/jest.config.ts b/packages/core/jest.config.ts index 21e9e0b9..2666b21e 100644 --- a/packages/core/jest.config.ts +++ b/packages/core/jest.config.ts @@ -1,8 +1,10 @@ +const rootConfig = require('../../jest.config'); + const coreConfig = { - ...require('../../jest.config'), + ...rootConfig, setupFilesAfterEnv: ['./jest-setup.ts'], - // Override the moduleNameMapper to use the correct path from the package moduleNameMapper: { + ...rootConfig.moduleNameMapper, '^@shared-jest-setup$': '../../jest-shared-setup.ts' } }; diff --git a/packages/ui/jest.config.ts b/packages/ui/jest.config.ts index 2892ee1d..aeface90 100644 --- a/packages/ui/jest.config.ts +++ b/packages/ui/jest.config.ts @@ -1,8 +1,10 @@ +const rootConfig = require('../../jest.config'); + const uiConfig = { - ...require('../../jest.config'), + ...rootConfig, setupFilesAfterEnv: ['./jest-setup.ts'], - // Override the moduleNameMapper to use the correct path from the package moduleNameMapper: { + ...rootConfig.moduleNameMapper, '^@shared-jest-setup$': '../../jest-shared-setup.ts' } }; From 4d9e9a59f0c8c40cb4a57f2ef6ec4eabe809596b Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:29:50 -0300 Subject: [PATCH 12/18] chore: align release bumps for appkit adapters --- .changeset/sharp-cars-approve.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/sharp-cars-approve.md b/.changeset/sharp-cars-approve.md index 3b6bde11..3abccfeb 100644 --- a/.changeset/sharp-cars-approve.md +++ b/.changeset/sharp-cars-approve.md @@ -1,5 +1,7 @@ --- '@reown/appkit-react-native': patch +'@reown/appkit-ethers-react-native': patch +'@reown/appkit-wagmi-react-native': patch --- feat: add modalWrapper prop for custom modal window wrappers From e4a938d124c17fdc30c52f9755cbe1ea6178bf06 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:31:13 -0300 Subject: [PATCH 13/18] chore: bump all packages in changeset --- .changeset/sharp-cars-approve.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.changeset/sharp-cars-approve.md b/.changeset/sharp-cars-approve.md index 3abccfeb..a9eda01f 100644 --- a/.changeset/sharp-cars-approve.md +++ b/.changeset/sharp-cars-approve.md @@ -1,6 +1,13 @@ --- -'@reown/appkit-react-native': patch +'@reown/appkit-bitcoin-react-native': patch +'@reown/appkit-coinbase-react-native': patch +'@reown/appkit-common-react-native': patch +'@reown/appkit-core-react-native': patch '@reown/appkit-ethers-react-native': patch +'@reown/appkit-react-native': patch +'@reown/appkit-react-native-cli': patch +'@reown/appkit-solana-react-native': patch +'@reown/appkit-ui-react-native': patch '@reown/appkit-wagmi-react-native': patch --- From e90c5972d42a2e9100db061fd9e9853bca9629e6 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:38:10 -0300 Subject: [PATCH 14/18] chore: bump claude auto review version --- .github/workflows/claude-auto-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/claude-auto-review.yml b/.github/workflows/claude-auto-review.yml index ec4e5421..203341a7 100644 --- a/.github/workflows/claude-auto-review.yml +++ b/.github/workflows/claude-auto-review.yml @@ -28,7 +28,7 @@ jobs: fetch-depth: 0 - name: Claude Auto Review - uses: WalletConnect/actions/claude/auto-review@1483e05460107d74c575e31af948ce20f9df6387 + uses: WalletConnect/actions/claude/auto-review@abf509235bc59f907de7905071c6910a0ac5de94 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} model: claude-sonnet-4-6 From 24cb419c16689ec9ff7f5527c6890823f2c0c3b2 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 9 Apr 2026 11:39:53 -0300 Subject: [PATCH 15/18] chore: removed model from params --- .github/workflows/claude-auto-review.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/claude-auto-review.yml b/.github/workflows/claude-auto-review.yml index 203341a7..1d9c8e03 100644 --- a/.github/workflows/claude-auto-review.yml +++ b/.github/workflows/claude-auto-review.yml @@ -31,7 +31,6 @@ jobs: uses: WalletConnect/actions/claude/auto-review@abf509235bc59f907de7905071c6910a0ac5de94 with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} - model: claude-sonnet-4-6 timeout_minutes: "60" project_context: | This is the AppKit React Native SDK, a comprehensive wallet connection and blockchain interaction library for React Native applications. From f98c49f9894d685b15744ac01e38503c51ff2937 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:39:30 -0300 Subject: [PATCH 16/18] fix: wrap modal content inside RN modal --- .changeset/sharp-cars-approve.md | 2 +- examples/expo-multichain/app/_layout.tsx | 2 +- .../src/__tests__/modal/w3m-modal.test.tsx | 37 +++++++++--- packages/appkit/src/index.ts | 4 +- packages/appkit/src/modal/w3m-modal/index.tsx | 37 ++++++------ .../ui/src/components/wui-modal/index.tsx | 59 +++++++++++++++---- packages/ui/src/index.ts | 7 ++- 7 files changed, 101 insertions(+), 47 deletions(-) diff --git a/.changeset/sharp-cars-approve.md b/.changeset/sharp-cars-approve.md index a9eda01f..0531e1f9 100644 --- a/.changeset/sharp-cars-approve.md +++ b/.changeset/sharp-cars-approve.md @@ -11,4 +11,4 @@ '@reown/appkit-wagmi-react-native': patch --- -feat: add modalWrapper prop for custom modal window wrappers +feat: add modalContentWrapper prop for custom modal content wrappers diff --git a/examples/expo-multichain/app/_layout.tsx b/examples/expo-multichain/app/_layout.tsx index 96ddf435..95d4e518 100644 --- a/examples/expo-multichain/app/_layout.tsx +++ b/examples/expo-multichain/app/_layout.tsx @@ -98,7 +98,7 @@ export default function RootLayout() { {/* Mount AppKit once in the root layout to avoid Android Expo Router modal layering issues. If your app already uses react-native-screens and transparentModal still hides the modal, - pass modalWrapper={FullWindowOverlay} here. */} + pass modalContentWrapper={FullWindowOverlay} here. */} diff --git a/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx b/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx index 6c340aa6..02e153d1 100644 --- a/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx +++ b/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx @@ -5,6 +5,9 @@ import { View } from 'react-native'; const mockClose = jest.fn(); const mockPrefetch = jest.fn().mockResolvedValue(undefined); const mockSendEvent = jest.fn(); +const modalState = { + open: true +}; jest.mock('valtio', () => ({ useSnapshot: jest.fn((state: Record) => state) @@ -43,7 +46,15 @@ jest.mock( {children} ), - Modal: ({ children, testID }: any) => {children}, + Modal: ({ children, testID, visible, contentWrapper: ContentWrapper }: any) => { + if (!visible) { + return null; + } + + const content = ContentWrapper ? {children} : children; + + return {content}; + }, ThemeProvider: ({ children }: any) => <>{children} }; }, @@ -60,9 +71,7 @@ jest.mock( sendEvent: mockSendEvent }, ModalController: { - state: { - open: true - } + state: modalState }, OptionsController: { state: { @@ -91,6 +100,7 @@ const { AppKit } = require('../../modal/w3m-modal'); describe('AppKit modal', () => { beforeEach(() => { jest.clearAllMocks(); + modalState.open = true; }); it('renders the modal without a wrapper', () => { @@ -100,14 +110,23 @@ describe('AppKit modal', () => { expect(queryByTestId('modal-wrapper')).toBeNull(); }); - it('wraps the modal when modalWrapper is provided', () => { - function ModalWrapper({ children }: { children: React.ReactNode }) { - return {children}; + it('wraps modal content when modalContentWrapper is provided', () => { + function ModalContentWrapper({ children }: { children: React.ReactNode }) { + return {children}; } - const { getByTestId } = render(); + const { getByTestId } = render(); - expect(getByTestId('modal-wrapper')).toBeTruthy(); + expect(getByTestId('modal-content-wrapper')).toBeTruthy(); expect(getByTestId('w3m-modal')).toBeTruthy(); }); + + it('does not render modal content when closed', () => { + modalState.open = false; + + const { queryByTestId } = render(); + + expect(queryByTestId('w3m-modal')).toBeNull(); + expect(queryByTestId('mock-card')).toBeNull(); + }); }); diff --git a/packages/appkit/src/index.ts b/packages/appkit/src/index.ts index 57ad6f20..2b1bf9aa 100644 --- a/packages/appkit/src/index.ts +++ b/packages/appkit/src/index.ts @@ -17,8 +17,8 @@ export { export { AppKit, type AppKitProps, - type AppKitModalWrapperComponent, - type AppKitModalWrapperProps + type AppKitModalContentWrapperComponent, + type AppKitModalContentWrapperProps } from './modal/w3m-modal'; /********** Types **********/ diff --git a/packages/appkit/src/modal/w3m-modal/index.tsx b/packages/appkit/src/modal/w3m-modal/index.tsx index d5ead915..ff5bd8a0 100644 --- a/packages/appkit/src/modal/w3m-modal/index.tsx +++ b/packages/appkit/src/modal/w3m-modal/index.tsx @@ -18,17 +18,17 @@ import { Snackbar } from '../../partials/w3m-snackbar'; import { useInternalAppKit } from '../../AppKitContext'; import styles from './styles'; -export interface AppKitModalWrapperProps { +export interface AppKitModalContentWrapperProps { children: ReactNode; } -export type AppKitModalWrapperComponent = ComponentType; +export type AppKitModalContentWrapperComponent = ComponentType; export interface AppKitProps { - modalWrapper?: AppKitModalWrapperComponent; + modalContentWrapper?: AppKitModalContentWrapperComponent; } -export function AppKit({ modalWrapper: ModalWrapper }: AppKitProps) { +export function AppKit({ modalContentWrapper }: AppKitProps) { const theme = useColorScheme(); const { bottom, top } = useSafeAreaInsets(); const { close } = useInternalAppKit(); @@ -63,24 +63,21 @@ export function AppKit({ modalWrapper: ModalWrapper }: AppKitProps) { } }, [projectId, prefetch]); - const modal = ( - - -
- - - - - ); - return ( - {ModalWrapper ? {modal} : modal} + + +
+ + + + ); } diff --git a/packages/ui/src/components/wui-modal/index.tsx b/packages/ui/src/components/wui-modal/index.tsx index d814cfce..5cba40d6 100644 --- a/packages/ui/src/components/wui-modal/index.tsx +++ b/packages/ui/src/components/wui-modal/index.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef, useState, type ComponentType, type ReactNode } from 'react'; import { useWindowDimensions, Modal as RNModal, @@ -14,13 +14,27 @@ export type ModalProps = Pick< RNModalProps, 'visible' | 'onDismiss' | 'testID' | 'onRequestClose' > & { - children: React.ReactNode; + children: ReactNode; onBackdropPress?: () => void; + contentWrapper?: ModalContentWrapperComponent; }; +export interface ModalContentWrapperProps { + children: ReactNode; +} + +export type ModalContentWrapperComponent = ComponentType; + const AnimatedPressable = Animated.createAnimatedComponent(Pressable); -export function Modal({ visible, onBackdropPress, onRequestClose, testID, children }: ModalProps) { +export function Modal({ + visible, + onBackdropPress, + onRequestClose, + testID, + children, + contentWrapper: ContentWrapper +}: ModalProps) { const { height } = useWindowDimensions(); const Theme = useTheme(); const backdropOpacity = useRef(new Animated.Value(0)).current; @@ -120,16 +134,35 @@ export function Modal({ visible, onBackdropPress, onRequestClose, testID, childr onRequestClose={onRequestClose} testID={testID} > - {showBackdrop ? ( - - ) : null} - - {children} - - + {ContentWrapper ? ( + + <> + {showBackdrop ? ( + + ) : null} + + {children} + + + + + ) : ( + <> + {showBackdrop ? ( + + ) : null} + + {children} + + + + )} ); } diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index f2e8efa4..4de0945d 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -50,7 +50,12 @@ export { ListTransaction, type ListTransactionProps } from './composites/wui-lis export { ListWallet, type ListWalletProps } from './composites/wui-list-wallet'; export { Logo, type LogoProps } from './composites/wui-logo'; export { LogoSelect, type LogoSelectProps } from './composites/wui-logo-select'; -export { Modal, type ModalProps } from './components/wui-modal'; +export { + Modal, + type ModalContentWrapperComponent, + type ModalContentWrapperProps, + type ModalProps +} from './components/wui-modal'; export { NetworkButton, type NetworkButtonProps } from './composites/wui-network-button'; export { NetworkImage, type NetworkImageProps } from './composites/wui-network-image'; export { NumericKeyboard, type NumericKeyboardProps } from './composites/wui-numeric-keyboard'; From dbe5a80225478926f5fa2531b409ca4c95e39a3c Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 9 Apr 2026 12:45:23 -0300 Subject: [PATCH 17/18] chore: code improvements --- .changeset/sharp-cars-approve.md | 1 - .../ui/src/components/wui-modal/index.tsx | 45 +++++++------------ 2 files changed, 16 insertions(+), 30 deletions(-) diff --git a/.changeset/sharp-cars-approve.md b/.changeset/sharp-cars-approve.md index 0531e1f9..a280c144 100644 --- a/.changeset/sharp-cars-approve.md +++ b/.changeset/sharp-cars-approve.md @@ -5,7 +5,6 @@ '@reown/appkit-core-react-native': patch '@reown/appkit-ethers-react-native': patch '@reown/appkit-react-native': patch -'@reown/appkit-react-native-cli': patch '@reown/appkit-solana-react-native': patch '@reown/appkit-ui-react-native': patch '@reown/appkit-wagmi-react-native': patch diff --git a/packages/ui/src/components/wui-modal/index.tsx b/packages/ui/src/components/wui-modal/index.tsx index 5cba40d6..3ee44228 100644 --- a/packages/ui/src/components/wui-modal/index.tsx +++ b/packages/ui/src/components/wui-modal/index.tsx @@ -125,6 +125,21 @@ export function Modal({ } }, [modalVisible, translateY, backdropOpacity, height]); + const modalContent = ( + <> + {showBackdrop ? ( + + ) : null} + + {children} + + + + ); + return ( - {ContentWrapper ? ( - - <> - {showBackdrop ? ( - - ) : null} - - {children} - - - - - ) : ( - <> - {showBackdrop ? ( - - ) : null} - - {children} - - - - )} + {ContentWrapper ? {modalContent} : modalContent} ); } From f6b43cc3e0c81aea51fbecc1534d507c463db3af Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Fri, 10 Apr 2026 10:23:53 -0300 Subject: [PATCH 18/18] chore: minor changes --- .changeset/sharp-cars-approve.md | 2 +- packages/appkit/src/__tests__/modal/w3m-modal.test.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/sharp-cars-approve.md b/.changeset/sharp-cars-approve.md index a280c144..5df25ad1 100644 --- a/.changeset/sharp-cars-approve.md +++ b/.changeset/sharp-cars-approve.md @@ -10,4 +10,4 @@ '@reown/appkit-wagmi-react-native': patch --- -feat: add modalContentWrapper prop for custom modal content wrappers +fix: add modalContentWrapper prop to work around Expo Router modal layering issues diff --git a/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx b/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx index 02e153d1..1adac9d9 100644 --- a/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx +++ b/packages/appkit/src/__tests__/modal/w3m-modal.test.tsx @@ -107,7 +107,7 @@ describe('AppKit modal', () => { const { getByTestId, queryByTestId } = render(); expect(getByTestId('w3m-modal')).toBeTruthy(); - expect(queryByTestId('modal-wrapper')).toBeNull(); + expect(queryByTestId('modal-content-wrapper')).toBeNull(); }); it('wraps modal content when modalContentWrapper is provided', () => {