@metamask-previews/seedless-onboarding-controller 2.3.0-preview-a5e5a801 → 2.3.0-preview-1d5c2cf9

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 CHANGED
@@ -7,10 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ### Fixed
11
-
12
- - Retrieve `accessToken` from the encrypted vault if it's not available as an in-memory state. ([#6155](https://github.com/MetaMask/core/pull/6155))
13
-
14
10
  ## [2.3.0]
15
11
 
16
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_getAccessToken, _SeedlessOnboardingController_setUnlocked, _SeedlessOnboardingController_persistOprfKey, _SeedlessOnboardingController_persistAuthPubKey, _SeedlessOnboardingController_storeKeyringEncryptionKey, _SeedlessOnboardingController_loadKeyringEncryptionKey, _SeedlessOnboardingController_loadSeedlessEncryptionKey, _SeedlessOnboardingController_recoverAuthPubKey, _SeedlessOnboardingController_recoverEncKey, _SeedlessOnboardingController_fetchAllSecretDataFromMetadataStore, _SeedlessOnboardingController_changeEncryptionKey, _SeedlessOnboardingController_encryptAndStoreSecretData, _SeedlessOnboardingController_unlockVaultAndGetVaultData, _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;
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", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this);
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", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this);
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", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, password);
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);
@@ -619,7 +619,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
619
619
  * @param keyringEncryptionKey - The keyring encryption key.
620
620
  */
621
621
  async storeKeyringEncryptionKey(keyringEncryptionKey) {
622
- const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this);
622
+ const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this);
623
623
  await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_storeKeyringEncryptionKey).call(this, encKey, keyringEncryptionKey);
624
624
  }
625
625
  /**
@@ -629,7 +629,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
629
629
  * @returns The keyring encryption key.
630
630
  */
631
631
  async loadKeyringEncryptionKey() {
632
- const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this);
632
+ const { toprfPwEncryptionKey: encKey } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this);
633
633
  return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_loadKeyringEncryptionKey).call(this, encKey);
634
634
  }
635
635
  /**
@@ -746,7 +746,7 @@ async function _SeedlessOnboardingController_submitGlobalPassword({ targetAuthPu
746
746
  const { pwEncKey } = res;
747
747
  const vaultKey = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_loadSeedlessEncryptionKey).call(this, pwEncKey);
748
748
  // Unlock the controller
749
- const { revokeToken, toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, undefined, vaultKey);
749
+ const { revokeToken, toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetBackupEncKey).call(this, undefined, vaultKey);
750
750
  __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
751
751
  if (revokeToken) {
752
752
  // revoke and recyle refresh token after unlock to keep refresh token fresh, avoid malicious use of leaked refresh token
@@ -769,28 +769,6 @@ async function _SeedlessOnboardingController_submitGlobalPassword({ targetAuthPu
769
769
  }
770
770
  throw errors_1.PasswordSyncError.getInstance(error);
771
771
  }
772
- }, _SeedlessOnboardingController_getAccessToken =
773
- /**
774
- * Get the access token from the state or the vault.
775
- * If the access token is not in the state, it will be retrieved from the vault by decrypting it with the password.
776
- *
777
- * If both the access token and the vault are not available, an error will be thrown.
778
- *
779
- * @param password - The optional password to unlock the vault. If not provided, the access token will be retrieved from the vault.
780
- * @returns The access token.
781
- */
782
- async function _SeedlessOnboardingController_getAccessToken(password) {
783
- const { accessToken, vault } = this.state;
784
- if (accessToken) {
785
- // if the access token is in the state, return it
786
- return accessToken;
787
- }
788
- // otherwise, check the vault availability and decrypt the access token from the vault
789
- if (!vault) {
790
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidAccessToken);
791
- }
792
- const { accessToken: accessTokenFromVault } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, password);
793
- return accessTokenFromVault;
794
772
  }, _SeedlessOnboardingController_setUnlocked = function _SeedlessOnboardingController_setUnlocked() {
795
773
  __classPrivateFieldSet(this, _SeedlessOnboardingController_isUnlocked, true, "f");
796
774
  }, _SeedlessOnboardingController_persistOprfKey =
@@ -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
- }, _SeedlessOnboardingController_unlockVaultAndGetVaultData =
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 _SeedlessOnboardingController_unlockVaultAndGetVaultData(password, encryptionKey) {
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
- const accessToken = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_getAccessToken).call(this, password);
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,
@@ -1326,8 +1304,9 @@ async function _SeedlessOnboardingController_revokeRefreshTokenAndUpdateState(re
1326
1304
  return false;
1327
1305
  }, _SeedlessOnboardingController_isMaxKeyChainLengthError = function _SeedlessOnboardingController_isMaxKeyChainLengthError(error) {
1328
1306
  if (error instanceof toprf_secure_backup_1.TOPRFError) {
1329
- return (error.code ===
1330
- toprf_secure_backup_1.TOPRFErrorCode.MaxKeyChainLengthExceeded);
1307
+ // todo: update this when the error message to error code once toprf sdk is updated.
1308
+ return (error.message ===
1309
+ 'Could not fetch password. Exceeded maximum password chain length');
1331
1310
  }
1332
1311
  return false;
1333
1312
  }, _SeedlessOnboardingController_executeWithTokenRefresh =