@metamask-previews/seedless-onboarding-controller 2.5.0-preview-bfa447b → 2.5.0-preview-a850cd0b

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.
@@ -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_passwordOutdatedCacheTTL, _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_isTokenExpiredError, _SeedlessOnboardingController_isMaxKeyChainLengthError, _SeedlessOnboardingController_executeWithTokenRefresh;
13
+ var _SeedlessOnboardingController_instances, _SeedlessOnboardingController_vaultEncryptor, _SeedlessOnboardingController_controllerOperationMutex, _SeedlessOnboardingController_vaultOperationMutex, _SeedlessOnboardingController_refreshJWTToken, _SeedlessOnboardingController_revokeRefreshToken, _SeedlessOnboardingController_isUnlocked, _SeedlessOnboardingController_passwordOutdatedCacheTTL, _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_decryptAndParseVaultData, _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_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");
@@ -707,11 +707,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
707
707
  rawToprfEncryptionKey,
708
708
  rawToprfPwEncryptionKey,
709
709
  rawToprfAuthKeyPair,
710
- revokeToken: newRevokeToken,
711
- // when revoke refresh token, the vault is already unlocked
712
- // and also, this method is supposed to be called asynchronously
713
- // so we don't need to set the controller as unlocked
714
- shouldSetUnlocked: false,
715
710
  });
716
711
  }
717
712
  });
@@ -828,8 +823,8 @@ async function _SeedlessOnboardingController_getAccessToken(password) {
828
823
  if (!vault) {
829
824
  throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidAccessToken);
830
825
  }
831
- const { accessToken: accessTokenFromVault } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, password);
832
- return accessTokenFromVault;
826
+ const { parsedVaultData } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_decryptAndParseVaultData).call(this, password);
827
+ return parsedVaultData.accessToken;
833
828
  }, _SeedlessOnboardingController_setUnlocked = function _SeedlessOnboardingController_setUnlocked() {
834
829
  __classPrivateFieldSet(this, _SeedlessOnboardingController_isUnlocked, true, "f");
835
830
  }, _SeedlessOnboardingController_persistOprfKey =
@@ -1078,42 +1073,11 @@ async function _SeedlessOnboardingController_encryptAndStoreSecretData(params) {
1078
1073
  */
1079
1074
  async function _SeedlessOnboardingController_unlockVaultAndGetVaultData(password, encryptionKey) {
1080
1075
  return __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withVaultLock).call(this, async () => {
1081
- let { vaultEncryptionKey } = this.state;
1082
- const { vault: encryptedVault, vaultEncryptionSalt } = this.state;
1083
- if (!encryptedVault) {
1084
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.VaultError);
1085
- }
1086
- if (encryptionKey) {
1087
- vaultEncryptionKey = encryptionKey;
1088
- }
1089
- let decryptedVaultData;
1090
- const updatedState = {};
1091
- if (password) {
1092
- assertIsValidPassword(password);
1093
- // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key
1094
- // from the password using an intentionally slow key derivation function.
1095
- // We should make sure that we only call it very intentionally.
1096
- const result = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").decryptWithDetail(password, encryptedVault);
1097
- decryptedVaultData = result.vault;
1098
- updatedState.vaultEncryptionKey = result.exportedKeyString;
1099
- updatedState.vaultEncryptionSalt = result.salt;
1100
- }
1101
- else {
1102
- assertIsVaultEncryptionKeyDefined(vaultEncryptionKey);
1103
- const parsedEncryptedVault = JSON.parse(encryptedVault);
1104
- if (vaultEncryptionSalt &&
1105
- vaultEncryptionSalt !== parsedEncryptedVault.salt) {
1106
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.ExpiredCredentials);
1107
- }
1108
- const key = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").importKey(vaultEncryptionKey);
1109
- decryptedVaultData = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").decryptWithKey(key, parsedEncryptedVault);
1110
- updatedState.vaultEncryptionKey = vaultEncryptionKey;
1111
- updatedState.vaultEncryptionSalt = vaultEncryptionSalt;
1112
- }
1113
- const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, revokeToken, accessToken, } = __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_parseVaultData).call(this, decryptedVaultData);
1076
+ const { parsedVaultData, vaultEncryptionKey, vaultEncryptionSalt } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_decryptAndParseVaultData).call(this, password, encryptionKey);
1077
+ const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, revokeToken, accessToken, } = parsedVaultData;
1114
1078
  this.update((state) => {
1115
- state.vaultEncryptionKey = updatedState.vaultEncryptionKey;
1116
- state.vaultEncryptionSalt = updatedState.vaultEncryptionSalt;
1079
+ state.vaultEncryptionKey = vaultEncryptionKey;
1080
+ state.vaultEncryptionSalt = vaultEncryptionSalt;
1117
1081
  state.revokeToken = revokeToken;
1118
1082
  state.accessToken = accessToken;
1119
1083
  });
@@ -1125,6 +1089,50 @@ async function _SeedlessOnboardingController_unlockVaultAndGetVaultData(password
1125
1089
  accessToken,
1126
1090
  };
1127
1091
  });
1092
+ }, _SeedlessOnboardingController_decryptAndParseVaultData =
1093
+ /**
1094
+ * Decrypts the vault data and parses it into a usable format.
1095
+ *
1096
+ * @param password - The optional password to decrypt the vault.
1097
+ * @param encryptionKey - The optional encryption key to decrypt the vault.
1098
+ * @returns A promise that resolves to an object containing:
1099
+ */
1100
+ async function _SeedlessOnboardingController_decryptAndParseVaultData(password, encryptionKey) {
1101
+ let { vaultEncryptionKey, vaultEncryptionSalt } = this.state;
1102
+ const { vault: encryptedVault } = this.state;
1103
+ if (!encryptedVault) {
1104
+ throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.VaultError);
1105
+ }
1106
+ if (encryptionKey) {
1107
+ vaultEncryptionKey = encryptionKey;
1108
+ }
1109
+ let decryptedVaultData;
1110
+ if (password) {
1111
+ assertIsValidPassword(password);
1112
+ // Note that vault decryption using the password is a very costly operation as it involves deriving the encryption key
1113
+ // from the password using an intentionally slow key derivation function.
1114
+ // We should make sure that we only call it very intentionally.
1115
+ const result = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").decryptWithDetail(password, encryptedVault);
1116
+ decryptedVaultData = result.vault;
1117
+ vaultEncryptionKey = result.exportedKeyString;
1118
+ vaultEncryptionSalt = result.salt;
1119
+ }
1120
+ else {
1121
+ assertIsVaultEncryptionKeyDefined(vaultEncryptionKey);
1122
+ const parsedEncryptedVault = JSON.parse(encryptedVault);
1123
+ if (vaultEncryptionSalt &&
1124
+ vaultEncryptionSalt !== parsedEncryptedVault.salt) {
1125
+ throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.ExpiredCredentials);
1126
+ }
1127
+ const key = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").importKey(vaultEncryptionKey);
1128
+ decryptedVaultData = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").decryptWithKey(key, parsedEncryptedVault);
1129
+ }
1130
+ const parsedVaultData = __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_parseVaultData).call(this, decryptedVaultData);
1131
+ return {
1132
+ parsedVaultData,
1133
+ vaultEncryptionKey,
1134
+ vaultEncryptionSalt,
1135
+ };
1128
1136
  }, _SeedlessOnboardingController_withPersistedSecretMetadataBackupsState =
1129
1137
  /**
1130
1138
  * Executes a callback function that creates or restores secret data and persists their hashes in the controller state.
@@ -1192,13 +1200,11 @@ async function _SeedlessOnboardingController_withPersistedSecretMetadataBackupsS
1192
1200
  * @param params.rawToprfEncryptionKey - The encryption key to encrypt the vault.
1193
1201
  * @param params.rawToprfPwEncryptionKey - The encryption key to encrypt the password.
1194
1202
  * @param params.rawToprfAuthKeyPair - The authentication key pair for Toprf operations.
1195
- * @param params.revokeToken - The optional revoke token.
1196
- * @param params.shouldSetUnlocked - Whether to set the controller as unlocked. @default true
1197
1203
  */
1198
- async function _SeedlessOnboardingController_createNewVaultWithAuthData({ password, rawToprfEncryptionKey, rawToprfPwEncryptionKey, rawToprfAuthKeyPair, revokeToken: _revokeToken, shouldSetUnlocked = true, }) {
1204
+ async function _SeedlessOnboardingController_createNewVaultWithAuthData({ password, rawToprfEncryptionKey, rawToprfPwEncryptionKey, rawToprfAuthKeyPair, }) {
1199
1205
  __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
1206
+ const { revokeToken } = this.state;
1200
1207
  const accessToken = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_getAccessToken).call(this, password);
1201
- const revokeToken = _revokeToken || this.state.revokeToken;
1202
1208
  const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair } = __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_serializeKeyData).call(this, rawToprfEncryptionKey, rawToprfPwEncryptionKey, rawToprfAuthKeyPair);
1203
1209
  const serializedVaultData = JSON.stringify({
1204
1210
  toprfEncryptionKey,
@@ -1216,9 +1222,7 @@ async function _SeedlessOnboardingController_createNewVaultWithAuthData({ passwo
1216
1222
  __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_persistAuthPubKey).call(this, {
1217
1223
  authPubKey: rawToprfAuthKeyPair.pk,
1218
1224
  });
1219
- if (shouldSetUnlocked) {
1220
- __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
1221
- }
1225
+ __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
1222
1226
  }, _SeedlessOnboardingController_updateVault =
1223
1227
  /**
1224
1228
  * Encrypt and update the vault with the given authentication data.