@metamask-previews/seedless-onboarding-controller 2.3.0-preview-feec3582 → 2.3.0-preview-849f6838
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -8
- package/dist/SeedlessOnboardingController.cjs +13 -35
- package/dist/SeedlessOnboardingController.cjs.map +1 -1
- package/dist/SeedlessOnboardingController.d.cts +0 -10
- package/dist/SeedlessOnboardingController.d.cts.map +1 -1
- package/dist/SeedlessOnboardingController.d.mts +0 -10
- package/dist/SeedlessOnboardingController.d.mts.map +1 -1
- package/dist/SeedlessOnboardingController.mjs +13 -35
- package/dist/SeedlessOnboardingController.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,14 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
### Added
|
|
11
|
-
|
|
12
|
-
- Added `getAccessToken` public method in the seedless-onboarding-controller. ([#6155](https://github.com/MetaMask/core/pull/6155))
|
|
13
|
-
|
|
14
|
-
### Fixed
|
|
15
|
-
|
|
16
|
-
- Retrieve `accessToken` from the encrypted vault if it's not available as an in-memory state. ([#6155](https://github.com/MetaMask/core/pull/6155))
|
|
17
|
-
|
|
18
10
|
## [2.3.0]
|
|
19
11
|
|
|
20
12
|
### Uncategorized
|
|
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
11
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
12
|
};
|
|
13
|
-
var _SeedlessOnboardingController_instances, _SeedlessOnboardingController_vaultEncryptor, _SeedlessOnboardingController_controllerOperationMutex, _SeedlessOnboardingController_vaultOperationMutex, _SeedlessOnboardingController_refreshJWTToken, _SeedlessOnboardingController_revokeRefreshToken, _SeedlessOnboardingController_isUnlocked, _SeedlessOnboardingController_submitGlobalPassword, _SeedlessOnboardingController_setUnlocked, _SeedlessOnboardingController_persistOprfKey, _SeedlessOnboardingController_persistAuthPubKey, _SeedlessOnboardingController_storeKeyringEncryptionKey, _SeedlessOnboardingController_loadKeyringEncryptionKey, _SeedlessOnboardingController_loadSeedlessEncryptionKey, _SeedlessOnboardingController_recoverAuthPubKey, _SeedlessOnboardingController_recoverEncKey, _SeedlessOnboardingController_fetchAllSecretDataFromMetadataStore, _SeedlessOnboardingController_changeEncryptionKey, _SeedlessOnboardingController_encryptAndStoreSecretData,
|
|
13
|
+
var _SeedlessOnboardingController_instances, _SeedlessOnboardingController_vaultEncryptor, _SeedlessOnboardingController_controllerOperationMutex, _SeedlessOnboardingController_vaultOperationMutex, _SeedlessOnboardingController_refreshJWTToken, _SeedlessOnboardingController_revokeRefreshToken, _SeedlessOnboardingController_isUnlocked, _SeedlessOnboardingController_submitGlobalPassword, _SeedlessOnboardingController_setUnlocked, _SeedlessOnboardingController_persistOprfKey, _SeedlessOnboardingController_persistAuthPubKey, _SeedlessOnboardingController_storeKeyringEncryptionKey, _SeedlessOnboardingController_loadKeyringEncryptionKey, _SeedlessOnboardingController_loadSeedlessEncryptionKey, _SeedlessOnboardingController_recoverAuthPubKey, _SeedlessOnboardingController_recoverEncKey, _SeedlessOnboardingController_fetchAllSecretDataFromMetadataStore, _SeedlessOnboardingController_changeEncryptionKey, _SeedlessOnboardingController_encryptAndStoreSecretData, _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey, _SeedlessOnboardingController_withPersistedSecretMetadataBackupsState, _SeedlessOnboardingController_filterDupesAndUpdateSocialBackupsMetadata, _SeedlessOnboardingController_createNewVaultWithAuthData, _SeedlessOnboardingController_updateVault, _SeedlessOnboardingController_withControllerLock, _SeedlessOnboardingController_withVaultLock, _SeedlessOnboardingController_serializeKeyData, _SeedlessOnboardingController_parseVaultData, _SeedlessOnboardingController_assertIsUnlocked, _SeedlessOnboardingController_assertIsAuthenticatedUser, _SeedlessOnboardingController_assertIsSRPBackedUpUser, _SeedlessOnboardingController_assertPasswordInSync, _SeedlessOnboardingController_resetPasswordOutdatedCache, _SeedlessOnboardingController_revokeRefreshTokenAndUpdateState, _SeedlessOnboardingController_isTokenExpiredError, _SeedlessOnboardingController_isMaxKeyChainLengthError, _SeedlessOnboardingController_executeWithTokenRefresh;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.SeedlessOnboardingController = exports.getDefaultSeedlessOnboardingControllerState = void 0;
|
|
16
16
|
const auth_network_utils_1 = require("@metamask/auth-network-utils");
|
|
@@ -317,7 +317,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
317
317
|
});
|
|
318
318
|
const performBackup = async () => {
|
|
319
319
|
// verify the password and unlock the vault
|
|
320
|
-
const { toprfEncryptionKey, toprfAuthKeyPair } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m",
|
|
320
|
+
const { toprfEncryptionKey, toprfAuthKeyPair } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this);
|
|
321
321
|
// encrypt and store the secret data
|
|
322
322
|
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_encryptAndStoreSecretData).call(this, {
|
|
323
323
|
data,
|
|
@@ -354,7 +354,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
354
354
|
else {
|
|
355
355
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsUnlocked).call(this);
|
|
356
356
|
// verify the password and unlock the vault
|
|
357
|
-
const keysFromVault = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m",
|
|
357
|
+
const keysFromVault = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this);
|
|
358
358
|
encKey = keysFromVault.toprfEncryptionKey;
|
|
359
359
|
pwEncKey = keysFromVault.toprfPwEncryptionKey;
|
|
360
360
|
authKeyPair = keysFromVault.toprfAuthKeyPair;
|
|
@@ -485,7 +485,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
485
485
|
*/
|
|
486
486
|
async submitPassword(password) {
|
|
487
487
|
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
488
|
-
const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, revokeToken, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m",
|
|
488
|
+
const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, revokeToken, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this, password);
|
|
489
489
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
490
490
|
if (revokeToken) {
|
|
491
491
|
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_revokeRefreshTokenAndUpdateState).call(this, revokeToken);
|
|
@@ -603,28 +603,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
603
603
|
? await doCheckIsPasswordExpired()
|
|
604
604
|
: await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, doCheckIsPasswordExpired), 'checkIsPasswordOutdated');
|
|
605
605
|
}
|
|
606
|
-
/**
|
|
607
|
-
* Get the access token from the state or the vault.
|
|
608
|
-
* If the access token is not in the state, it will be retrieved from the vault by decrypting it with the password.
|
|
609
|
-
*
|
|
610
|
-
* If both the access token and the vault are not available, an error will be thrown.
|
|
611
|
-
*
|
|
612
|
-
* @param password - The password to unlock the vault.
|
|
613
|
-
* @returns The access token.
|
|
614
|
-
*/
|
|
615
|
-
async getAccessToken(password) {
|
|
616
|
-
const { accessToken, vault } = this.state;
|
|
617
|
-
if (accessToken) {
|
|
618
|
-
// if the access token is in the state, return it
|
|
619
|
-
return accessToken;
|
|
620
|
-
}
|
|
621
|
-
// otherwise, check the vault availability and decrypt the access token from the vault
|
|
622
|
-
if (!vault) {
|
|
623
|
-
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidAccessToken);
|
|
624
|
-
}
|
|
625
|
-
const { accessToken: accessTokenFromVault } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKeyAndTokens).call(this, password);
|
|
626
|
-
return accessTokenFromVault;
|
|
627
|
-
}
|
|
628
606
|
/**
|
|
629
607
|
* Clears the current state of the SeedlessOnboardingController.
|
|
630
608
|
*/
|
|
@@ -641,7 +619,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
641
619
|
* @param keyringEncryptionKey - The keyring encryption key.
|
|
642
620
|
*/
|
|
643
621
|
async storeKeyringEncryptionKey(keyringEncryptionKey) {
|
|
644
|
-
const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m",
|
|
622
|
+
const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this);
|
|
645
623
|
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_storeKeyringEncryptionKey).call(this, encKey, keyringEncryptionKey);
|
|
646
624
|
}
|
|
647
625
|
/**
|
|
@@ -651,7 +629,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
651
629
|
* @returns The keyring encryption key.
|
|
652
630
|
*/
|
|
653
631
|
async loadKeyringEncryptionKey() {
|
|
654
|
-
const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m",
|
|
632
|
+
const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this);
|
|
655
633
|
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_loadKeyringEncryptionKey).call(this, encKey);
|
|
656
634
|
}
|
|
657
635
|
/**
|
|
@@ -768,7 +746,7 @@ async function _SeedlessOnboardingController_submitGlobalPassword({ targetAuthPu
|
|
|
768
746
|
const { pwEncKey } = res;
|
|
769
747
|
const vaultKey = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_loadSeedlessEncryptionKey).call(this, pwEncKey);
|
|
770
748
|
// Unlock the controller
|
|
771
|
-
const { revokeToken, toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m",
|
|
749
|
+
const { revokeToken, toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this, undefined, vaultKey);
|
|
772
750
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
773
751
|
if (revokeToken) {
|
|
774
752
|
// revoke and recyle refresh token after unlock to keep refresh token fresh, avoid malicious use of leaked refresh token
|
|
@@ -1000,7 +978,7 @@ async function _SeedlessOnboardingController_encryptAndStoreSecretData(params) {
|
|
|
1000
978
|
log('Error encrypting and storing secret data backup', error);
|
|
1001
979
|
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.FailedToEncryptAndStoreSecretData);
|
|
1002
980
|
}
|
|
1003
|
-
},
|
|
981
|
+
}, _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey =
|
|
1004
982
|
/**
|
|
1005
983
|
* Unlocks the encrypted vault using the provided password and returns the decrypted vault data.
|
|
1006
984
|
* This method ensures thread-safety by using a mutex lock when accessing the vault.
|
|
@@ -1010,15 +988,13 @@ async function _SeedlessOnboardingController_encryptAndStoreSecretData(params) {
|
|
|
1010
988
|
* @returns A promise that resolves to an object containing:
|
|
1011
989
|
* - toprfEncryptionKey: The decrypted TOPRF encryption key
|
|
1012
990
|
* - toprfAuthKeyPair: The decrypted TOPRF authentication key pair
|
|
1013
|
-
* - revokeToken: The decrypted revoke token
|
|
1014
|
-
* - accessToken: The decrypted access token
|
|
1015
991
|
* @throws {Error} If:
|
|
1016
992
|
* - The password is invalid or empty
|
|
1017
993
|
* - The vault is not initialized
|
|
1018
994
|
* - The password is incorrect (from encryptor.decrypt)
|
|
1019
995
|
* - The decrypted vault data is malformed
|
|
1020
996
|
*/
|
|
1021
|
-
async function
|
|
997
|
+
async function _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey(password, encryptionKey) {
|
|
1022
998
|
return __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withVaultLock).call(this, async () => {
|
|
1023
999
|
let { vaultEncryptionKey } = this.state;
|
|
1024
1000
|
const { vault: encryptedVault, vaultEncryptionSalt } = this.state;
|
|
@@ -1137,7 +1113,9 @@ async function _SeedlessOnboardingController_withPersistedSecretMetadataBackupsS
|
|
|
1137
1113
|
*/
|
|
1138
1114
|
async function _SeedlessOnboardingController_createNewVaultWithAuthData({ password, rawToprfEncryptionKey, rawToprfPwEncryptionKey, rawToprfAuthKeyPair, }) {
|
|
1139
1115
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
1140
|
-
|
|
1116
|
+
if (!this.state.accessToken) {
|
|
1117
|
+
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidAccessToken);
|
|
1118
|
+
}
|
|
1141
1119
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
1142
1120
|
const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair } = __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_serializeKeyData).call(this, rawToprfEncryptionKey, rawToprfPwEncryptionKey, rawToprfAuthKeyPair);
|
|
1143
1121
|
const serializedVaultData = JSON.stringify({
|
|
@@ -1145,7 +1123,7 @@ async function _SeedlessOnboardingController_createNewVaultWithAuthData({ passwo
|
|
|
1145
1123
|
toprfPwEncryptionKey,
|
|
1146
1124
|
toprfAuthKeyPair,
|
|
1147
1125
|
revokeToken: this.state.revokeToken,
|
|
1148
|
-
accessToken,
|
|
1126
|
+
accessToken: this.state.accessToken,
|
|
1149
1127
|
});
|
|
1150
1128
|
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_updateVault).call(this, {
|
|
1151
1129
|
password,
|