From f01e8379fa150981845691e43ab436de61c348d8 Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Tue, 18 Jul 2023 16:50:03 -0230 Subject: [PATCH 1/6] v10.34.1 --- CHANGELOG.md | 5 ++++- package.json | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00d3852f0..3ffcc03cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [10.34.1] + ## [10.34.0] ### Added - Add a security quiz to the SRP reveal ([#19283](https://github.com/MetaMask/metamask-extension/pull/19283)) @@ -3853,7 +3855,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Uncategorized - Added the ability to restore accounts from seed words. -[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.34.0...HEAD +[Unreleased]: https://github.com/MetaMask/metamask-extension/compare/v10.34.1...HEAD +[10.34.1]: https://github.com/MetaMask/metamask-extension/compare/v10.34.0...v10.34.1 [10.34.0]: https://github.com/MetaMask/metamask-extension/compare/v10.33.1...v10.34.0 [10.33.1]: https://github.com/MetaMask/metamask-extension/compare/v10.33.0...v10.33.1 [10.33.0]: https://github.com/MetaMask/metamask-extension/compare/v10.32.0...v10.33.0 diff --git a/package.json b/package.json index a830bca0c..6fe998e48 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "metamask-crx", - "version": "10.34.0", + "version": "10.34.1", "private": true, "repository": { "type": "git", From fbae250b0a3316387bac845c21642280850bd6d5 Mon Sep 17 00:00:00 2001 From: Mark Stacey Date: Tue, 18 Jul 2023 20:05:06 -0230 Subject: [PATCH 2/6] Fix invalid state persistence error (#20080) * Fix invalid state persistence error We have been seeing Sentry errors showing that state persistence has been failing for some users that have invalid `NetworkController` state. This has been fixed by updating to `@metamask/base-controller@v3.2.0`, which is more tolerant of unexpected state properties. * Update LavaMoat policies --------- Co-authored-by: MetaMask Bot --- lavamoat/browserify/beta/policy.json | 4 ++++ lavamoat/browserify/desktop/policy.json | 8 ++++++++ lavamoat/browserify/flask/policy.json | 8 ++++++++ lavamoat/browserify/main/policy.json | 4 ++++ lavamoat/browserify/mmi/policy.json | 4 ++++ package.json | 2 +- yarn.lock | 21 +++++++++++---------- 7 files changed, 40 insertions(+), 11 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 8231a9ec8..9b750dc06 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -1527,6 +1527,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1769,6 +1770,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1911,6 +1913,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1946,6 +1949,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, diff --git a/lavamoat/browserify/desktop/policy.json b/lavamoat/browserify/desktop/policy.json index 7428fea81..75d7032be 100644 --- a/lavamoat/browserify/desktop/policy.json +++ b/lavamoat/browserify/desktop/policy.json @@ -1274,6 +1274,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1291,6 +1292,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1653,6 +1655,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1992,6 +1995,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2198,6 +2202,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2367,6 +2372,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2404,6 +2410,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2437,6 +2444,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 7428fea81..75d7032be 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -1274,6 +1274,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1291,6 +1292,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1653,6 +1655,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1992,6 +1995,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2198,6 +2202,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2367,6 +2372,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2404,6 +2410,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2437,6 +2444,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 8231a9ec8..9b750dc06 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -1527,6 +1527,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1769,6 +1770,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1911,6 +1913,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1946,6 +1949,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index 9dabc001b..938c0d76e 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -1748,6 +1748,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -1990,6 +1991,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2132,6 +2134,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, @@ -2167,6 +2170,7 @@ "TextEncoder": true }, "packages": { + "@metamask/key-tree>@noble/hashes": true, "browserify>buffer": true, "nock>debug": true, "semver": true, diff --git a/package.json b/package.json index 6fe998e48..e80cdb33a 100644 --- a/package.json +++ b/package.json @@ -227,7 +227,7 @@ "@metamask/announcement-controller": "^4.0.0", "@metamask/approval-controller": "^3.3.0", "@metamask/assets-controllers": "^9.2.0", - "@metamask/base-controller": "^3.1.0", + "@metamask/base-controller": "^3.2.0", "@metamask/browser-passworder": "^4.1.0", "@metamask/contract-metadata": "^2.3.1", "@metamask/controller-utils": "^4.2.0", diff --git a/yarn.lock b/yarn.lock index a47b620aa..da39e1257 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3940,13 +3940,13 @@ __metadata: languageName: node linkType: hard -"@metamask/base-controller@npm:^3.0.0, @metamask/base-controller@npm:^3.1.0": - version: 3.1.0 - resolution: "@metamask/base-controller@npm:3.1.0" +"@metamask/base-controller@npm:^3.0.0, @metamask/base-controller@npm:^3.1.0, @metamask/base-controller@npm:^3.2.0": + version: 3.2.0 + resolution: "@metamask/base-controller@npm:3.2.0" dependencies: - "@metamask/utils": ^5.0.2 + "@metamask/utils": ^6.2.0 immer: ^9.0.6 - checksum: fc1597a099e6d28bd089df936ca349d6c38c2e1b0f0737385cba30c34a5239241519eb172d77c70f8db2604f4dc5724f6893affe42bdd104cef98f9cfd6f1db8 + checksum: 3be6f2594309c013e07f83c4bb8271e1e99f02b6ff829c18b5e7218fbab4e6a9e03bcb49056704ce47f84ae2f38b1bc1c10284ec538aad56ed7b554ef2d3e189 languageName: node linkType: hard @@ -5005,16 +5005,17 @@ __metadata: languageName: node linkType: hard -"@metamask/utils@npm:^6.0.0, @metamask/utils@npm:^6.0.1, @metamask/utils@npm:^6.1.0": - version: 6.1.0 - resolution: "@metamask/utils@npm:6.1.0" +"@metamask/utils@npm:^6.0.0, @metamask/utils@npm:^6.0.1, @metamask/utils@npm:^6.1.0, @metamask/utils@npm:^6.2.0": + version: 6.2.0 + resolution: "@metamask/utils@npm:6.2.0" dependencies: "@ethereumjs/tx": ^4.1.2 + "@noble/hashes": ^1.3.1 "@types/debug": ^4.1.7 debug: ^4.3.4 semver: ^7.3.8 superstruct: ^1.0.3 - checksum: d4eac3ce3c08674b8e9ef838d1661a5025690c6f266c26ebdb8e8d0da11fce786e54c326b5d9c6d33b262f37e7057e31d6545a3715613bd0a5bfa10e7755643a + checksum: 0bc675358ecc09b3bc04da613d73666295d7afa51ff6b8554801585966900b24b8545bd93b8b2e9a17db867ebe421fe884baf3558ec4ca3199fa65504f677c1b languageName: node linkType: hard @@ -24474,7 +24475,7 @@ __metadata: "@metamask/approval-controller": ^3.3.0 "@metamask/assets-controllers": ^9.2.0 "@metamask/auto-changelog": ^2.1.0 - "@metamask/base-controller": ^3.1.0 + "@metamask/base-controller": ^3.2.0 "@metamask/browser-passworder": ^4.1.0 "@metamask/contract-metadata": ^2.3.1 "@metamask/controller-utils": ^4.2.0 From 374656a3d15e43f25f73874bacb85ce679532f8d Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Fri, 21 Jul 2023 16:33:25 -0230 Subject: [PATCH 3/6] Fix sentry sourcemaps (#20122) * Update sentry/cli to 2.19.4 * Ensure sentry files are loaded and referenced with a valid url * Temp to eliminate errors in sentry (should be split into other PRs) --- app/scripts/lib/setupSentry.js | 2 +- development/build/index.js | 2 ++ development/sentry-upload-artifacts.sh | 2 +- lavamoat/build-system/policy.json | 16 ++++++++-------- package.json | 2 +- yarn.lock | 16 ++++++++-------- 6 files changed, 21 insertions(+), 19 deletions(-) diff --git a/app/scripts/lib/setupSentry.js b/app/scripts/lib/setupSentry.js index a383f8221..bac3c79ce 100644 --- a/app/scripts/lib/setupSentry.js +++ b/app/scripts/lib/setupSentry.js @@ -352,6 +352,6 @@ function toMetamaskUrl(origUrl) { if (!filePath) { return origUrl; } - const metamaskUrl = `metamask${filePath}`; + const metamaskUrl = `/metamask${filePath}`; return metamaskUrl; } diff --git a/development/build/index.js b/development/build/index.js index 84ee91040..92a6ea678 100755 --- a/development/build/index.js +++ b/development/build/index.js @@ -99,6 +99,8 @@ async function defineAndRunBuildTasks() { 'navigator', 'harden', 'console', + 'WeakSet', + 'Event', 'Image', // Used by browser to generate notifications // globals chromedriver needs to function /cdc_[a-zA-Z0-9]+_[a-zA-Z]+/iu, diff --git a/development/sentry-upload-artifacts.sh b/development/sentry-upload-artifacts.sh index 9d2fd32b4..e70989123 100755 --- a/development/sentry-upload-artifacts.sh +++ b/development/sentry-upload-artifacts.sh @@ -31,7 +31,7 @@ function upload_sourcemaps { local release="${1}"; shift local dist_directory="${1}"; shift - sentry-cli releases files "${release}" upload-sourcemaps "${dist_directory}"/chrome/*.js "${dist_directory}"/sourcemaps/ --rewrite --url-prefix 'metamask' + sentry-cli releases files "${release}" upload-sourcemaps "${dist_directory}"/chrome/*.js "${dist_directory}"/sourcemaps/ --rewrite --url-prefix '/metamask' } function main { diff --git a/lavamoat/build-system/policy.json b/lavamoat/build-system/policy.json index a615563a8..98fd8942c 100644 --- a/lavamoat/build-system/policy.json +++ b/lavamoat/build-system/policy.json @@ -1124,13 +1124,6 @@ "@metamask/jazzicon>color>color-convert>color-name": true } }, - "@sentry/cli>mkdirp": { - "builtin": { - "fs": true, - "path.dirname": true, - "path.resolve": true - } - }, "@storybook/addon-knobs>qs": { "packages": { "string.prototype.matchall>side-channel": true @@ -8153,7 +8146,14 @@ "path.dirname": true }, "packages": { - "@sentry/cli>mkdirp": true + "stylelint>file-entry-cache>flat-cache>write>mkdirp": true + } + }, + "stylelint>file-entry-cache>flat-cache>write>mkdirp": { + "builtin": { + "fs": true, + "path.dirname": true, + "path.resolve": true } }, "stylelint>global-modules": { diff --git a/package.json b/package.json index e80cdb33a..ac81c669a 100644 --- a/package.json +++ b/package.json @@ -382,7 +382,7 @@ "@metamask/forwarder": "^1.1.0", "@metamask/phishing-warning": "^2.1.0", "@metamask/test-dapp": "^7.0.1", - "@sentry/cli": "^1.58.0", + "@sentry/cli": "^2.19.4", "@storybook/addon-a11y": "^7.0.11", "@storybook/addon-actions": "^7.0.11", "@storybook/addon-essentials": "^7.0.11", diff --git a/yarn.lock b/yarn.lock index da39e1257..4b43e388f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5597,18 +5597,18 @@ __metadata: languageName: node linkType: hard -"@sentry/cli@npm:^1.58.0": - version: 1.58.0 - resolution: "@sentry/cli@npm:1.58.0" +"@sentry/cli@npm:^2.19.4": + version: 2.19.4 + resolution: "@sentry/cli@npm:2.19.4" dependencies: https-proxy-agent: ^5.0.0 - mkdirp: ^0.5.5 - node-fetch: ^2.6.0 + node-fetch: ^2.6.7 progress: ^2.0.3 proxy-from-env: ^1.1.0 + which: ^2.0.2 bin: sentry-cli: bin/sentry-cli - checksum: fc781bbffcf5cd970bb023168421ad89bca4184c2ddfbfddde92f4f5333c8b9075e9e16a8a4b192ecc3b197ac97062715e7b350c306ccc538fc01b955b06c3bb + checksum: 1f2442857a5eec2bc6f872a633d88fc2f11ed7f434db36627a034d904390f4cbbb4dccc33c571a8815e423cd36b863c72621298d49a1541b28370c7f7308f0dc languageName: node linkType: hard @@ -24530,7 +24530,7 @@ __metadata: "@reduxjs/toolkit": ^1.6.2 "@segment/loosely-validate-event": ^2.0.0 "@sentry/browser": ^7.53.0 - "@sentry/cli": ^1.58.0 + "@sentry/cli": ^2.19.4 "@sentry/integrations": ^7.53.0 "@sentry/types": ^7.53.0 "@sentry/utils": ^7.53.0 @@ -26117,7 +26117,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:~2.6.1": +"node-fetch@npm:^2, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:~2.6.1": version: 2.6.11 resolution: "node-fetch@npm:2.6.11" dependencies: From b1fb8204f3b5d9fdd88a5cef98d42bc926a536bb Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Tue, 25 Jul 2023 21:17:57 -0230 Subject: [PATCH 4/6] Migration 89: ensure providerConfig in state has an id property (#20181) * Migration 89: ensure providerConfig in state has an id property * Exit transformState function early if providerConfig already has an id * Update migrations/index.js * Code cleanup --- app/scripts/migrations/089.test.ts | 224 +++++++++++++++++++++++++++++ app/scripts/migrations/089.ts | 71 +++++++++ app/scripts/migrations/index.js | 2 + 3 files changed, 297 insertions(+) create mode 100644 app/scripts/migrations/089.test.ts create mode 100644 app/scripts/migrations/089.ts diff --git a/app/scripts/migrations/089.test.ts b/app/scripts/migrations/089.test.ts new file mode 100644 index 000000000..00868ff74 --- /dev/null +++ b/app/scripts/migrations/089.test.ts @@ -0,0 +1,224 @@ +import { migrate, version } from './089'; + +jest.mock('uuid', () => { + const actual = jest.requireActual('uuid'); + + return { + ...actual, + v4: jest.fn(), + }; +}); + +describe('migration #89', () => { + it('should update the version metadata', async () => { + const oldStorage = { + meta: { + version: 88, + }, + data: {}, + }; + + const newStorage = await migrate(oldStorage); + expect(newStorage.meta).toStrictEqual({ + version, + }); + }); + + it('should return state unaltered if there is no network controller state', async () => { + const oldData = { + other: 'data', + }; + const oldStorage = { + meta: { + version: 88, + }, + data: oldData, + }; + + const newStorage = await migrate(oldStorage); + expect(newStorage.data).toStrictEqual(oldData); + }); + + it('should return state unaltered if there is no network controller providerConfig state', async () => { + const oldData = { + other: 'data', + NetworkController: { + networkConfigurations: { + id1: { + foo: 'bar', + }, + }, + }, + }; + const oldStorage = { + meta: { + version: 88, + }, + data: oldData, + }; + + const newStorage = await migrate(oldStorage); + expect(newStorage.data).toStrictEqual(oldData); + }); + + it('should return state unaltered if the providerConfig already has an id', async () => { + const oldData = { + other: 'data', + NetworkController: { + networkConfigurations: { + id1: { + foo: 'bar', + }, + }, + providerConfig: { + id: 'test', + }, + }, + }; + const oldStorage = { + meta: { + version: 88, + }, + data: oldData, + }; + + const newStorage = await migrate(oldStorage); + expect(newStorage.data).toStrictEqual(oldData); + }); + + it('should return state unaltered if there is no network config with the same rpcUrl and the providerConfig', async () => { + const oldData = { + other: 'data', + NetworkController: { + networkConfigurations: { + id1: { + foo: 'bar', + rpcUrl: 'http://foo.bar', + }, + }, + providerConfig: { + rpcUrl: 'http://baz.buzz', + }, + }, + }; + const oldStorage = { + meta: { + version: 88, + }, + data: oldData, + }; + + const newStorage = await migrate(oldStorage); + expect(newStorage.data).toStrictEqual(oldData); + }); + + it('should update the provider config to have the id of a network config with the same rpcUrl', async () => { + const oldData = { + other: 'data', + NetworkController: { + networkConfigurations: { + id1: { + foo: 'bar', + rpcUrl: 'http://foo.bar', + id: 'test', + }, + }, + providerConfig: { + rpcUrl: 'http://foo.bar', + }, + }, + }; + const oldStorage = { + meta: { + version: 88, + }, + data: oldData, + }; + + const newStorage = await migrate(oldStorage); + expect(newStorage.data).toStrictEqual({ + other: 'data', + NetworkController: { + networkConfigurations: { + id1: { + foo: 'bar', + rpcUrl: 'http://foo.bar', + id: 'test', + }, + }, + providerConfig: { + rpcUrl: 'http://foo.bar', + id: 'test', + }, + }, + }); + }); + + it('should update the provider config to have the id of a network config with the same rpcUrl, even if there are other networks with the same chainId', async () => { + const oldData = { + other: 'data', + NetworkController: { + networkConfigurations: { + id1: { + foo: 'bar', + rpcUrl: 'http://fizz.buzz', + id: 'FAILEDtest', + chainId: 1, + }, + id2: { + foo: 'bar', + rpcUrl: 'http://foo.bar', + id: 'PASSEDtest', + }, + id3: { + foo: 'bar', + rpcUrl: 'http://baz.buzz', + id: 'FAILEDtest', + chainId: 1, + }, + }, + providerConfig: { + rpcUrl: 'http://foo.bar', + chainId: 1, + }, + }, + }; + const oldStorage = { + meta: { + version: 88, + }, + data: oldData, + }; + + const newStorage = await migrate(oldStorage); + expect(newStorage.data).toStrictEqual({ + other: 'data', + NetworkController: { + networkConfigurations: { + id1: { + foo: 'bar', + rpcUrl: 'http://fizz.buzz', + id: 'FAILEDtest', + chainId: 1, + }, + id2: { + foo: 'bar', + rpcUrl: 'http://foo.bar', + id: 'PASSEDtest', + }, + id3: { + foo: 'bar', + rpcUrl: 'http://baz.buzz', + id: 'FAILEDtest', + chainId: 1, + }, + }, + providerConfig: { + rpcUrl: 'http://foo.bar', + id: 'PASSEDtest', + chainId: 1, + }, + }, + }); + }); +}); diff --git a/app/scripts/migrations/089.ts b/app/scripts/migrations/089.ts new file mode 100644 index 000000000..cc1bfa4dc --- /dev/null +++ b/app/scripts/migrations/089.ts @@ -0,0 +1,71 @@ +import { hasProperty, isObject } from '@metamask/utils'; +import { cloneDeep } from 'lodash'; + +export const version = 89; + +/** + * Add an `id` to the `providerConfig` object. + * + * @param originalVersionedData - Versioned MetaMask extension state, exactly what we persist to dist. + * @param originalVersionedData.meta - State metadata. + * @param originalVersionedData.meta.version - The current state version. + * @param originalVersionedData.data - The persisted MetaMask state, keyed by controller. + * @returns Updated versioned MetaMask extension state. + */ +export async function migrate(originalVersionedData: { + meta: { version: number }; + data: Record; +}) { + const versionedData = cloneDeep(originalVersionedData); + versionedData.meta.version = version; + versionedData.data = transformState(versionedData.data); + return versionedData; +} + +function transformState(state: Record) { + if ( + hasProperty(state, 'NetworkController') && + isObject(state.NetworkController) && + hasProperty(state.NetworkController, 'providerConfig') && + isObject(state.NetworkController.providerConfig) + ) { + const { networkConfigurations, providerConfig } = state.NetworkController; + + if (!isObject(networkConfigurations)) { + return state; + } + + if (providerConfig.id) { + return state; + } + + let newProviderConfigId; + + for (const networkConfigurationId of Object.keys(networkConfigurations)) { + const networkConfiguration = + networkConfigurations[networkConfigurationId]; + if (!isObject(networkConfiguration)) { + return state; + } + if (networkConfiguration.rpcUrl === providerConfig.rpcUrl) { + newProviderConfigId = networkConfiguration.id; + break; + } + } + + if (!newProviderConfigId) { + return state; + } + + state.NetworkController.providerConfig = { + ...providerConfig, + id: newProviderConfigId, + }; + + return { + ...state, + NetworkController: state.NetworkController, + }; + } + return state; +} diff --git a/app/scripts/migrations/index.js b/app/scripts/migrations/index.js index 813f5e799..429ef7959 100644 --- a/app/scripts/migrations/index.js +++ b/app/scripts/migrations/index.js @@ -92,6 +92,7 @@ import * as m085 from './085'; import * as m086 from './086'; import * as m087 from './087'; import * as m088 from './088'; +import * as m089 from './089'; const migrations = [ m002, @@ -181,6 +182,7 @@ const migrations = [ m086, m087, m088, + m089, ]; export default migrations; From 40314a84c9a1670a893abf633e562a1264a8f6b5 Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Tue, 25 Jul 2023 21:23:42 -0230 Subject: [PATCH 5/6] Update changelog for v10.34.1 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ffcc03cc..212f65a2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ## [10.34.1] +### Fixed +- Fix bug that could cause a failure in the persistence of network related data ([#20080](https://github.com/MetaMask/metamask-extension/pull/20080)) +- Fix ([#20080](https://github.com/MetaMask/metamask-extension/pull/20080)) ## [10.34.0] ### Added From 9ee7459d0fbd868d4fafa65e91a8b4655fa930bd Mon Sep 17 00:00:00 2001 From: Dan J Miller Date: Tue, 25 Jul 2023 23:44:54 -0230 Subject: [PATCH 6/6] Update yarn.lock for v10.34.1, which updated sentry/cli -> node-fetch dep version, but doesn't include b7da0a9 --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 4b43e388f..83b49a9a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26117,9 +26117,9 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:~2.6.1": - version: 2.6.11 - resolution: "node-fetch@npm:2.6.11" +"node-fetch@npm:^2, node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:~2.6.1": + version: 2.6.12 + resolution: "node-fetch@npm:2.6.12" dependencies: whatwg-url: ^5.0.0 peerDependencies: @@ -26127,7 +26127,7 @@ __metadata: peerDependenciesMeta: encoding: optional: true - checksum: 249d0666a9497553384d46b5ab296ba223521ac88fed4d8a17d6ee6c2efb0fc890f3e8091cafe7f9fba8151a5b8d925db2671543b3409a56c3cd522b468b47b3 + checksum: 3bc1655203d47ee8e313c0d96664b9673a3d4dd8002740318e9d27d14ef306693a4b2ef8d6525775056fd912a19e23f3ac0d7111ad8925877b7567b29a625592 languageName: node linkType: hard