@metamask-previews/seedless-onboarding-controller 6.0.0-preview-cc7e30d0 → 6.0.0-preview-5460dce

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,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
- ### Changed
11
-
12
- - Revert `revokeToken` value as optional in `authenticate` method. ([#7012](https://github.com/MetaMask/core/pull/7012))
13
-
14
- ### Fixed
15
-
16
- - Fixed `InvalidRevokeToken` issue in `refreshAuthTokens` method. ([#7012](https://github.com/MetaMask/core/pull/7012))
17
-
18
10
  ## [6.0.0]
19
11
 
20
12
  ### Added
@@ -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_renewRefreshToken, _SeedlessOnboardingController_passwordOutdatedCacheTTL, _SeedlessOnboardingController_isUnlocked, _SeedlessOnboardingController_cachedDecryptedVaultData, _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_unlockVaultAndGetVaultData, _SeedlessOnboardingController_decryptAndParseVaultData, _SeedlessOnboardingController_withPersistedSecretMetadataBackupsState, _SeedlessOnboardingController_filterDupesAndUpdateSocialBackupsMetadata, _SeedlessOnboardingController_createNewVaultWithAuthData, _SeedlessOnboardingController_updateVault, _SeedlessOnboardingController_getAccessTokenAndRevokeToken, _SeedlessOnboardingController_withControllerLock, _SeedlessOnboardingController_withVaultLock, _SeedlessOnboardingController_parseVaultData, _SeedlessOnboardingController_assertIsUnlocked, _SeedlessOnboardingController_assertIsAuthenticatedUser, _SeedlessOnboardingController_assertIsSRPBackedUpUser, _SeedlessOnboardingController_assertPasswordInSync, _SeedlessOnboardingController_resetPasswordOutdatedCache, _SeedlessOnboardingController_addRefreshTokenToRevokeList, _SeedlessOnboardingController_isAuthTokenError, _SeedlessOnboardingController_isMaxKeyChainLengthError, _SeedlessOnboardingController_executeWithTokenRefresh;
13
+ var _SeedlessOnboardingController_instances, _SeedlessOnboardingController_vaultEncryptor, _SeedlessOnboardingController_controllerOperationMutex, _SeedlessOnboardingController_vaultOperationMutex, _SeedlessOnboardingController_refreshJWTToken, _SeedlessOnboardingController_revokeRefreshToken, _SeedlessOnboardingController_renewRefreshToken, _SeedlessOnboardingController_passwordOutdatedCacheTTL, _SeedlessOnboardingController_isUnlocked, _SeedlessOnboardingController_cachedDecryptedVaultData, _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_unlockVaultAndGetVaultData, _SeedlessOnboardingController_decryptAndParseVaultData, _SeedlessOnboardingController_withPersistedSecretMetadataBackupsState, _SeedlessOnboardingController_filterDupesAndUpdateSocialBackupsMetadata, _SeedlessOnboardingController_createNewVaultWithAuthData, _SeedlessOnboardingController_updateVault, _SeedlessOnboardingController_withControllerLock, _SeedlessOnboardingController_withVaultLock, _SeedlessOnboardingController_parseVaultData, _SeedlessOnboardingController_assertIsUnlocked, _SeedlessOnboardingController_assertIsAuthenticatedUser, _SeedlessOnboardingController_assertIsSRPBackedUpUser, _SeedlessOnboardingController_assertPasswordInSync, _SeedlessOnboardingController_resetPasswordOutdatedCache, _SeedlessOnboardingController_addRefreshTokenToRevokeList, _SeedlessOnboardingController_isAuthTokenError, _SeedlessOnboardingController_isMaxKeyChainLengthError, _SeedlessOnboardingController_executeWithTokenRefresh;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.SeedlessOnboardingController = exports.getInitialSeedlessOnboardingControllerStateWithDefaults = void 0;
16
16
  const auth_network_utils_1 = require("@metamask/auth-network-utils");
@@ -298,10 +298,8 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
298
298
  state.socialLoginEmail = socialLoginEmail;
299
299
  state.metadataAccessToken = metadataAccessToken;
300
300
  state.refreshToken = refreshToken;
301
- if (revokeToken) {
302
- // Temporarily store revoke token & access token in state for later vault creation
303
- state.revokeToken = revokeToken;
304
- }
301
+ // Temporarily store revoke token & access token in state for later vault creation
302
+ state.revokeToken = revokeToken;
305
303
  state.accessToken = accessToken;
306
304
  // we will check if the controller state is properly set with the authenticated user info
307
305
  // before setting the isSeedlessOnboardingUserAuthenticated to true
@@ -643,7 +641,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
643
641
  return passwordOutdatedCache.isExpiredPwd;
644
642
  }
645
643
  }
646
- __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
644
+ (0, assertions_1.assertIsAuthUserInfoValid)(this.state);
647
645
  const { nodeAuthTokens, authConnectionId, groupedAuthConnectionId, userId, } = this.state;
648
646
  const currentDeviceAuthPubKey = __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_recoverAuthPubKey).call(this);
649
647
  let globalAuthPubKey = options?.globalAuthPubKey;
@@ -681,9 +679,8 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
681
679
  async checkIsSeedlessOnboardingUserAuthenticated() {
682
680
  let isAuthenticated = false;
683
681
  try {
684
- __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
685
- isAuthenticated =
686
- Boolean(this.state.accessToken) && Boolean(this.state.refreshToken);
682
+ (0, assertions_1.assertIsSeedlessOnboardingUserAuthenticated)(this.state);
683
+ isAuthenticated = true;
687
684
  }
688
685
  catch {
689
686
  isAuthenticated = false;
@@ -732,7 +729,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
732
729
  */
733
730
  async refreshAuthTokens() {
734
731
  __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
735
- const { refreshToken } = this.state;
732
+ const { refreshToken, revokeToken } = this.state;
736
733
  const res = await __classPrivateFieldGet(this, _SeedlessOnboardingController_refreshJWTToken, "f").call(this, {
737
734
  connection: this.state.authConnection,
738
735
  refreshToken,
@@ -752,6 +749,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
752
749
  groupedAuthConnectionId: this.state.groupedAuthConnectionId,
753
750
  userId: this.state.userId,
754
751
  refreshToken,
752
+ revokeToken,
755
753
  skipLock: true,
756
754
  });
757
755
  }
@@ -776,6 +774,9 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
776
774
  password,
777
775
  encryptionKey: vaultEncryptionKey,
778
776
  });
777
+ if (!revokeToken) {
778
+ throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidRevokeToken);
779
+ }
779
780
  const { newRevokeToken, newRefreshToken } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_renewRefreshToken, "f").call(this, {
780
781
  connection: this.state.authConnection,
781
782
  revokeToken,
@@ -886,9 +887,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
886
887
  try {
887
888
  __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
888
889
  const { accessToken } = this.state;
889
- if (!accessToken) {
890
- return true; // Consider missing token as expired
891
- }
892
890
  const decodedToken = (0, utils_3.decodeJWTToken)(accessToken);
893
891
  return decodedToken.exp < Math.floor(Date.now() / 1000);
894
892
  }
@@ -1026,7 +1024,7 @@ async function _SeedlessOnboardingController_loadSeedlessEncryptionKey(encKey) {
1026
1024
  * @throws RecoveryError - If failed to recover the encryption key.
1027
1025
  */
1028
1026
  async function _SeedlessOnboardingController_recoverEncKey(password) {
1029
- __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
1027
+ (0, assertions_1.assertIsAuthUserInfoValid)(this.state);
1030
1028
  const { nodeAuthTokens, authConnectionId, groupedAuthConnectionId, userId, } = this.state;
1031
1029
  try {
1032
1030
  const recoverEncKeyResult = await this.toprfClient.recoverEncKey({
@@ -1316,31 +1314,25 @@ async function _SeedlessOnboardingController_withPersistedSecretMetadataBackupsS
1316
1314
  * @param params.rawToprfAuthKeyPair - The authentication key pair for Toprf operations.
1317
1315
  */
1318
1316
  async function _SeedlessOnboardingController_createNewVaultWithAuthData({ password, rawToprfEncryptionKey, rawToprfPwEncryptionKey, rawToprfAuthKeyPair, }) {
1319
- try {
1320
- __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
1321
- const { accessToken, revokeToken } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_getAccessTokenAndRevokeToken).call(this, password);
1322
- const vaultData = {
1323
- toprfAuthKeyPair: rawToprfAuthKeyPair,
1324
- toprfEncryptionKey: rawToprfEncryptionKey,
1325
- toprfPwEncryptionKey: rawToprfPwEncryptionKey,
1326
- revokeToken,
1327
- accessToken,
1328
- };
1329
- await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_updateVault).call(this, {
1330
- password,
1331
- vaultData,
1332
- pwEncKey: rawToprfPwEncryptionKey,
1333
- });
1334
- // update the authPubKey in the state
1335
- __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_persistAuthPubKey).call(this, {
1336
- authPubKey: rawToprfAuthKeyPair.pk,
1337
- });
1338
- __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
1339
- }
1340
- catch (error) {
1341
- log('Error creating new vault with auth data', error, JSON.stringify(this.state));
1342
- throw error;
1343
- }
1317
+ __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
1318
+ const { revokeToken, accessToken } = this.state;
1319
+ const vaultData = {
1320
+ toprfAuthKeyPair: rawToprfAuthKeyPair,
1321
+ toprfEncryptionKey: rawToprfEncryptionKey,
1322
+ toprfPwEncryptionKey: rawToprfPwEncryptionKey,
1323
+ revokeToken,
1324
+ accessToken,
1325
+ };
1326
+ await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_updateVault).call(this, {
1327
+ password,
1328
+ vaultData,
1329
+ pwEncKey: rawToprfPwEncryptionKey,
1330
+ });
1331
+ // update the authPubKey in the state
1332
+ __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_persistAuthPubKey).call(this, {
1333
+ authPubKey: rawToprfAuthKeyPair.pk,
1334
+ });
1335
+ __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
1344
1336
  }, _SeedlessOnboardingController_updateVault =
1345
1337
  /**
1346
1338
  * Encrypt and update the vault with the given authentication data.
@@ -1371,31 +1363,6 @@ async function _SeedlessOnboardingController_updateVault({ password, vaultData,
1371
1363
  state.encryptedSeedlessEncryptionKey = (0, utils_1.bytesToBase64)(encryptedKey);
1372
1364
  });
1373
1365
  });
1374
- }, _SeedlessOnboardingController_getAccessTokenAndRevokeToken =
1375
- /**
1376
- * Get the access token and revoke token from the state or the vault.
1377
- *
1378
- * @param password - The password to decrypt the vault.
1379
- * @returns The access token and revoke token.
1380
- */
1381
- async function _SeedlessOnboardingController_getAccessTokenAndRevokeToken(password) {
1382
- let { accessToken, revokeToken } = this.state;
1383
- if (accessToken && revokeToken) {
1384
- return { accessToken, revokeToken };
1385
- }
1386
- if (this.state.vault) {
1387
- // if the access token or revoke token is not available in the state, decrypt the vault and get the access token and revoke token from the vault
1388
- const { vaultData } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_decryptAndParseVaultData).call(this, { password });
1389
- accessToken = accessToken || vaultData.accessToken;
1390
- revokeToken = revokeToken || vaultData.revokeToken;
1391
- }
1392
- if (!accessToken) {
1393
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidAccessToken);
1394
- }
1395
- if (!revokeToken) {
1396
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidRevokeToken);
1397
- }
1398
- return { accessToken, revokeToken };
1399
1366
  }, _SeedlessOnboardingController_withControllerLock =
1400
1367
  /**
1401
1368
  * Lock the controller mutex before executing the given function,