Skip to content

Commit dd5b1ac

Browse files
chore: bump @metamask/{keyring,seedless-onboarding}-controller (#37454)
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> Depends on MetaMask/core#7128 ## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> Bumping `keyring-controller` and `seedless-onboarding-controller` to pick up the latest changes. `@metamask/browser-passworder` is also being bumped to `^6.0.0`, and the encryptor factory has been adjusted to include `keyFromPassword`, `generateSalt` and `exportKey` as they are required by `KeyringController`. [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/37454?quickstart=1) ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: null ## **Related issues** Fixes: ## **Manual testing steps** 1. Go to this page... 2. 3. ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Extension Coding Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Upgrades keyring, seedless onboarding, and passworder deps and updates controller init, types, tests, and policies to the new encryptor API (removes `cacheEncryptionKey`). > > - **Dependencies**: > - Bump `@metamask/keyring-controller` to `^25.0.0`, `@metamask/seedless-onboarding-controller` to `^7.0.0`, and `@metamask/browser-passworder` to `^6.0.0`. > - **Controller Init**: > - `keyring-controller-init`: remove `cacheEncryptionKey` when constructing `KeyringController`. > - `seedless-onboarding-controller-init`: use `SeedlessOnboardingController<CryptoKey | EncryptionKey>` and pass `encryptor` directly (drop custom wrapper). > - **Types**: > - Change `encryptor` type from optional `ExportableKeyEncryptor` to required `Encryptor` in `controller-init/types`. > - **Tests/Mocks**: > - Update expectations for encryptor methods (`encryptWithKey`, `isVaultUpdated`, `exportKey`, `generateSalt`, `keyFromPassword`). > - Adjust mock encryptor to implement `importKey` returning parsed key and new `exportKey`. > - Remove `cacheEncryptionKey` from test expectation. > - **Security Policy**: > - Update LavaMoat policies to reflect `browser-passworder` changes (remove nested package allowances, adjust to `@metamask/utils`). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3733c29. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: MetaMask Bot <[email protected]>
1 parent 3dab6e3 commit dd5b1ac

File tree

14 files changed

+35
-190
lines changed

14 files changed

+35
-190
lines changed

app/scripts/controller-init/keyring-controller-init.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ describe('KeyringControllerInit', () => {
6565
expect(controllerMock).toHaveBeenCalledWith({
6666
messenger: expect.any(Object),
6767
state: undefined,
68-
cacheEncryptionKey: true,
6968
encryptor: expect.any(Object),
7069
keyringBuilders: expect.any(Array),
7170
});

app/scripts/controller-init/keyring-controller-init.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,9 @@ export const KeyringControllerInit: ControllerInitFunction<
109109
additionalKeyrings.push(snapKeyringBuilder);
110110
///: END:ONLY_INCLUDE_IF
111111

112-
// @ts-expect-error: The types for the encryptor are not correct.
113112
const controller = new KeyringController({
114113
state: persistedState.KeyringController,
115114
messenger: controllerMessenger,
116-
cacheEncryptionKey: true,
117115
keyringBuilders: additionalKeyrings,
118116
encryptor: encryptor || encryptorFactory(600_000),
119117
});

app/scripts/controller-init/seedless-onboarding/seedless-onboarding-controller-init.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,12 @@ describe('SeedlessOnboardingControllerInit', () => {
7171
decryptWithKey: expect.any(Function),
7272
encrypt: expect.any(Function),
7373
encryptWithDetail: expect.any(Function),
74+
encryptWithKey: expect.any(Function),
75+
isVaultUpdated: expect.any(Function),
7476
importKey: expect.any(Function),
77+
exportKey: expect.any(Function),
78+
generateSalt: expect.any(Function),
79+
keyFromPassword: expect.any(Function),
7580
},
7681
passwordOutdatedCacheTTL: expect.any(Number),
7782
refreshJWTToken: expect.any(Function),

app/scripts/controller-init/seedless-onboarding/seedless-onboarding-controller-init.ts

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {
33
SeedlessOnboardingControllerMessenger,
44
Web3AuthNetwork,
55
} from '@metamask/seedless-onboarding-controller';
6-
import { EncryptionKey, EncryptionResult } from '@metamask/browser-passworder';
6+
import { EncryptionKey } from '@metamask/browser-passworder';
77
import { ControllerInitFunction } from '../types';
88
import { encryptorFactory } from '../../lib/encryptor-factory';
99
import { isDevOrTestBuild } from '../../services/oauth/config';
@@ -24,7 +24,9 @@ export const SeedlessOnboardingControllerInit: ControllerInitFunction<
2424

2525
const network = loadWeb3AuthNetwork();
2626

27-
const controller = new SeedlessOnboardingController({
27+
const controller = new SeedlessOnboardingController<
28+
CryptoKey | EncryptionKey
29+
>({
2830
messenger: controllerMessenger,
2931
state: persistedState.SeedlessOnboardingController,
3032
network,
@@ -41,24 +43,7 @@ export const SeedlessOnboardingControllerInit: ControllerInitFunction<
4143
renewRefreshToken: (...args) =>
4244
initMessenger.call('OAuthService:renewRefreshToken', ...args),
4345

44-
encryptor: {
45-
decrypt: (key, encryptedData) => encryptor.decrypt(key, encryptedData),
46-
decryptWithDetail: (key, encryptedData) =>
47-
encryptor.decryptWithDetail(key, encryptedData),
48-
decryptWithKey(key, encryptedData) {
49-
let payload: EncryptionResult;
50-
if (typeof encryptedData === 'string') {
51-
payload = JSON.parse(encryptedData);
52-
} else {
53-
payload = encryptedData;
54-
}
55-
56-
return encryptor.decryptWithKey(key as EncryptionKey, payload);
57-
},
58-
encrypt: (key, data) => encryptor.encrypt(key, data),
59-
encryptWithDetail: (key, data) => encryptor.encryptWithDetail(key, data),
60-
importKey: (key) => encryptor.importKey(key),
61-
},
46+
encryptor,
6247
});
6348

6449
return {

app/scripts/controller-init/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { Duplex } from 'readable-stream';
77
import { SubjectType } from '@metamask/permission-controller';
88
import { PreinstalledSnap } from '@metamask/snaps-controllers';
99
import { Browser } from 'webextension-polyfill';
10-
import { ExportableKeyEncryptor } from '@metamask/keyring-controller';
10+
import { Encryptor } from '@metamask/keyring-controller';
1111
import { KeyringClass } from '@metamask/keyring-utils';
1212
import { QrKeyringScannerBridge } from '@metamask/eth-qr-keyring';
1313
import type { TransactionMetricsRequest } from '../../../shared/types';
@@ -83,7 +83,7 @@ export type ControllerInitRequest<
8383
* An instance of an encryptor to use for encrypting and decrypting
8484
* sensitive data.
8585
*/
86-
encryptor?: ExportableKeyEncryptor;
86+
encryptor: Encryptor;
8787

8888
/**
8989
* The extension browser API.

lavamoat/browserify/beta/policy.json

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@
978978
"crypto.subtle.importKey": true
979979
},
980980
"packages": {
981-
"@metamask/browser-passworder>@metamask/utils": true,
981+
"@metamask/utils": true,
982982
"browserify>buffer": true
983983
}
984984
},
@@ -1496,7 +1496,6 @@
14961496
"packages": {
14971497
"@ethereumjs/tx>@ethereumjs/util": true,
14981498
"@metamask/base-controller": true,
1499-
"@metamask/browser-passworder": true,
15001499
"@metamask/keyring-controller>@metamask/eth-hd-keyring": true,
15011500
"@metamask/eth-sig-util": true,
15021501
"@metamask/keyring-controller>@metamask/eth-simple-keyring": true,
@@ -2450,21 +2449,6 @@
24502449
"semver": true
24512450
}
24522451
},
2453-
"@metamask/browser-passworder>@metamask/utils": {
2454-
"globals": {
2455-
"TextDecoder": true,
2456-
"TextEncoder": true
2457-
},
2458-
"packages": {
2459-
"@metamask/superstruct": true,
2460-
"@noble/hashes": true,
2461-
"@scure/base": true,
2462-
"browserify>buffer": true,
2463-
"nock>debug": true,
2464-
"@metamask/utils>pony-cause": true,
2465-
"semver": true
2466-
}
2467-
},
24682452
"@ngraveio/bc-ur": {
24692453
"packages": {
24702454
"@ngraveio/bc-ur>@keystonehq/alias-sampling": true,

lavamoat/browserify/experimental/policy.json

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@
978978
"crypto.subtle.importKey": true
979979
},
980980
"packages": {
981-
"@metamask/browser-passworder>@metamask/utils": true,
981+
"@metamask/utils": true,
982982
"browserify>buffer": true
983983
}
984984
},
@@ -1496,7 +1496,6 @@
14961496
"packages": {
14971497
"@ethereumjs/tx>@ethereumjs/util": true,
14981498
"@metamask/base-controller": true,
1499-
"@metamask/browser-passworder": true,
15001499
"@metamask/keyring-controller>@metamask/eth-hd-keyring": true,
15011500
"@metamask/eth-sig-util": true,
15021501
"@metamask/keyring-controller>@metamask/eth-simple-keyring": true,
@@ -2450,21 +2449,6 @@
24502449
"semver": true
24512450
}
24522451
},
2453-
"@metamask/browser-passworder>@metamask/utils": {
2454-
"globals": {
2455-
"TextDecoder": true,
2456-
"TextEncoder": true
2457-
},
2458-
"packages": {
2459-
"@metamask/superstruct": true,
2460-
"@noble/hashes": true,
2461-
"@scure/base": true,
2462-
"browserify>buffer": true,
2463-
"nock>debug": true,
2464-
"@metamask/utils>pony-cause": true,
2465-
"semver": true
2466-
}
2467-
},
24682452
"@ngraveio/bc-ur": {
24692453
"packages": {
24702454
"@ngraveio/bc-ur>@keystonehq/alias-sampling": true,

lavamoat/browserify/flask/policy.json

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@
978978
"crypto.subtle.importKey": true
979979
},
980980
"packages": {
981-
"@metamask/browser-passworder>@metamask/utils": true,
981+
"@metamask/utils": true,
982982
"browserify>buffer": true
983983
}
984984
},
@@ -1496,7 +1496,6 @@
14961496
"packages": {
14971497
"@ethereumjs/tx>@ethereumjs/util": true,
14981498
"@metamask/base-controller": true,
1499-
"@metamask/browser-passworder": true,
15001499
"@metamask/keyring-controller>@metamask/eth-hd-keyring": true,
15011500
"@metamask/eth-sig-util": true,
15021501
"@metamask/keyring-controller>@metamask/eth-simple-keyring": true,
@@ -2450,21 +2449,6 @@
24502449
"semver": true
24512450
}
24522451
},
2453-
"@metamask/browser-passworder>@metamask/utils": {
2454-
"globals": {
2455-
"TextDecoder": true,
2456-
"TextEncoder": true
2457-
},
2458-
"packages": {
2459-
"@metamask/superstruct": true,
2460-
"@noble/hashes": true,
2461-
"@scure/base": true,
2462-
"browserify>buffer": true,
2463-
"nock>debug": true,
2464-
"@metamask/utils>pony-cause": true,
2465-
"semver": true
2466-
}
2467-
},
24682452
"@ngraveio/bc-ur": {
24692453
"packages": {
24702454
"@ngraveio/bc-ur>@keystonehq/alias-sampling": true,

lavamoat/browserify/main/policy.json

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -978,7 +978,7 @@
978978
"crypto.subtle.importKey": true
979979
},
980980
"packages": {
981-
"@metamask/browser-passworder>@metamask/utils": true,
981+
"@metamask/utils": true,
982982
"browserify>buffer": true
983983
}
984984
},
@@ -1496,7 +1496,6 @@
14961496
"packages": {
14971497
"@ethereumjs/tx>@ethereumjs/util": true,
14981498
"@metamask/base-controller": true,
1499-
"@metamask/browser-passworder": true,
15001499
"@metamask/keyring-controller>@metamask/eth-hd-keyring": true,
15011500
"@metamask/eth-sig-util": true,
15021501
"@metamask/keyring-controller>@metamask/eth-simple-keyring": true,
@@ -2450,21 +2449,6 @@
24502449
"semver": true
24512450
}
24522451
},
2453-
"@metamask/browser-passworder>@metamask/utils": {
2454-
"globals": {
2455-
"TextDecoder": true,
2456-
"TextEncoder": true
2457-
},
2458-
"packages": {
2459-
"@metamask/superstruct": true,
2460-
"@noble/hashes": true,
2461-
"@scure/base": true,
2462-
"browserify>buffer": true,
2463-
"nock>debug": true,
2464-
"@metamask/utils>pony-cause": true,
2465-
"semver": true
2466-
}
2467-
},
24682452
"@ngraveio/bc-ur": {
24692453
"packages": {
24702454
"@ngraveio/bc-ur>@keystonehq/alias-sampling": true,

lavamoat/webpack/mv2/policy.json

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -982,7 +982,7 @@
982982
"crypto.subtle.importKey": true
983983
},
984984
"packages": {
985-
"@metamask/browser-passworder>@metamask/utils": true,
985+
"@metamask/utils": true,
986986
"buffer": true
987987
}
988988
},
@@ -1484,7 +1484,6 @@
14841484
"packages": {
14851485
"@ethereumjs/tx>@ethereumjs/util": true,
14861486
"@metamask/base-controller": true,
1487-
"@metamask/browser-passworder": true,
14881487
"@metamask/keyring-controller>@metamask/eth-hd-keyring": true,
14891488
"@metamask/eth-sig-util": true,
14901489
"@metamask/keyring-controller>@metamask/eth-simple-keyring": true,
@@ -2307,22 +2306,6 @@
23072306
"semver": true
23082307
}
23092308
},
2310-
"@metamask/browser-passworder>@metamask/utils": {
2311-
"globals": {
2312-
"Buffer": true,
2313-
"TextDecoder": true,
2314-
"TextEncoder": true
2315-
},
2316-
"packages": {
2317-
"@metamask/superstruct": true,
2318-
"@noble/hashes": true,
2319-
"@scure/base": true,
2320-
"buffer": true,
2321-
"nock>debug": true,
2322-
"@metamask/utils>pony-cause": true,
2323-
"semver": true
2324-
}
2325-
},
23262309
"@ngraveio/bc-ur": {
23272310
"globals": {
23282311
"Buffer.alloc": true,

0 commit comments

Comments
 (0)