@metamask-previews/seedless-onboarding-controller 2.5.1-preview-eb8c7b7a → 2.6.0-preview-2fd8e984

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,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.6.0]
11
+
12
+ ### Added
13
+
14
+ - Added new persisted state value, `isSeedlessOnboardingUserAuthenticated`. ([#6288](https://github.com/MetaMask/core/pull/6288))
15
+ - This is for the UI state in the clients, to avoid querying sensistive controller state data to determine the social login authentication state.
16
+
10
17
  ### Changed
11
18
 
12
19
  - Bump `@metamask/base-controller` from `^8.0.1` to `^8.1.0` ([#6284](https://github.com/MetaMask/core/pull/6284))
@@ -142,7 +149,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
142
149
  - `checkIsPasswordOutdated`: Check if the password is current device is outdated, i.e. user changed password in another device.
143
150
  - `clearState`: Reset the state of the controller to the defaults.
144
151
 
145
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@2.5.1...HEAD
152
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@2.6.0...HEAD
153
+ [2.6.0]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@2.5.1...@metamask/seedless-onboarding-controller@2.6.0
146
154
  [2.5.1]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@2.5.0...@metamask/seedless-onboarding-controller@2.5.1
147
155
  [2.5.0]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@2.4.0...@metamask/seedless-onboarding-controller@2.5.0
148
156
  [2.4.0]: https://github.com/MetaMask/core/compare/@metamask/seedless-onboarding-controller@2.3.0...@metamask/seedless-onboarding-controller@2.4.0
@@ -12,7 +12,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
12
12
  };
13
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
- exports.SeedlessOnboardingController = exports.getDefaultSeedlessOnboardingControllerState = void 0;
15
+ exports.SeedlessOnboardingController = exports.getInitialSeedlessOnboardingControllerStateWithDefaults = void 0;
16
16
  const auth_network_utils_1 = require("@metamask/auth-network-utils");
17
17
  const base_controller_1 = require("@metamask/base-controller");
18
18
  const toprf_secure_backup_1 = require("@metamask/toprf-secure-backup");
@@ -30,16 +30,28 @@ const SecretMetadata_1 = require("./SecretMetadata.cjs");
30
30
  const utils_3 = require("./utils.cjs");
31
31
  const log = (0, logger_1.createModuleLogger)(logger_1.projectLogger, constants_1.controllerName);
32
32
  /**
33
- * Get the default state for the Seedless Onboarding Controller.
33
+ * Get the initial state for the Seedless Onboarding Controller with defaults.
34
34
  *
35
- * @returns The default state for the Seedless Onboarding Controller.
35
+ * @param overrides - The overrides for the initial state.
36
+ * @returns The initial state for the Seedless Onboarding Controller.
36
37
  */
37
- function getDefaultSeedlessOnboardingControllerState() {
38
- return {
38
+ function getInitialSeedlessOnboardingControllerStateWithDefaults(overrides) {
39
+ const initialState = {
39
40
  socialBackupsMetadata: [],
41
+ isSeedlessOnboardingUserAuthenticated: false,
42
+ ...overrides,
40
43
  };
44
+ // Ensure authenticated flag is set correctly.
45
+ try {
46
+ (0, assertions_1.assertIsSeedlessOnboardingUserAuthenticated)(initialState);
47
+ initialState.isSeedlessOnboardingUserAuthenticated = true;
48
+ }
49
+ catch {
50
+ initialState.isSeedlessOnboardingUserAuthenticated = false;
51
+ }
52
+ return initialState;
41
53
  }
42
- exports.getDefaultSeedlessOnboardingControllerState = getDefaultSeedlessOnboardingControllerState;
54
+ exports.getInitialSeedlessOnboardingControllerStateWithDefaults = getInitialSeedlessOnboardingControllerStateWithDefaults;
43
55
  /**
44
56
  * Seedless Onboarding Controller State Metadata.
45
57
  *
@@ -123,6 +135,10 @@ const seedlessOnboardingMetadata = {
123
135
  persist: true,
124
136
  anonymous: false,
125
137
  },
138
+ isSeedlessOnboardingUserAuthenticated: {
139
+ persist: true,
140
+ anonymous: true,
141
+ },
126
142
  };
127
143
  class SeedlessOnboardingController extends base_controller_1.BaseController {
128
144
  /**
@@ -142,10 +158,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
142
158
  super({
143
159
  name: constants_1.controllerName,
144
160
  metadata: seedlessOnboardingMetadata,
145
- state: {
146
- ...getDefaultSeedlessOnboardingControllerState(),
147
- ...state,
148
- },
161
+ state: getInitialSeedlessOnboardingControllerStateWithDefaults(state),
149
162
  messenger,
150
163
  });
151
164
  _SeedlessOnboardingController_instances.add(this);
@@ -237,6 +250,8 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
237
250
  state.userId = userId;
238
251
  state.authConnection = authConnection;
239
252
  state.socialLoginEmail = socialLoginEmail;
253
+ state.metadataAccessToken = metadataAccessToken;
254
+ state.accessToken = accessToken;
240
255
  if (refreshToken) {
241
256
  state.refreshToken = refreshToken;
242
257
  }
@@ -244,12 +259,10 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
244
259
  // Temporarily store revoke token in state for later vault creation
245
260
  state.revokeToken = revokeToken;
246
261
  }
247
- if (accessToken) {
248
- state.accessToken = accessToken;
249
- }
250
- if (metadataAccessToken) {
251
- state.metadataAccessToken = metadataAccessToken;
252
- }
262
+ // we will check if the controller state is properly set with the authenticated user info
263
+ // before setting the isSeedlessOnboardingUserAuthenticated to true
264
+ (0, assertions_1.assertIsSeedlessOnboardingUserAuthenticated)(state);
265
+ state.isSeedlessOnboardingUserAuthenticated = true;
253
266
  });
254
267
  return authenticationResult;
255
268
  }
@@ -616,7 +629,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
616
629
  * Clears the current state of the SeedlessOnboardingController.
617
630
  */
618
631
  clearState() {
619
- const defaultState = getDefaultSeedlessOnboardingControllerState();
632
+ const defaultState = getInitialSeedlessOnboardingControllerStateWithDefaults();
620
633
  this.update(() => {
621
634
  return defaultState;
622
635
  });
@@ -1322,27 +1335,14 @@ async function _SeedlessOnboardingController_withVaultLock(callback) {
1322
1335
  throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.ControllerLocked);
1323
1336
  }
1324
1337
  }, _SeedlessOnboardingController_assertIsAuthenticatedUser = function _SeedlessOnboardingController_assertIsAuthenticatedUser(value) {
1325
- if (!value ||
1326
- typeof value !== 'object' ||
1327
- !('authConnectionId' in value) ||
1328
- typeof value.authConnectionId !== 'string' ||
1329
- !('userId' in value) ||
1330
- typeof value.userId !== 'string') {
1331
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.MissingAuthUserInfo);
1332
- }
1333
- if (!('nodeAuthTokens' in value) ||
1334
- typeof value.nodeAuthTokens !== 'object' ||
1335
- !Array.isArray(value.nodeAuthTokens) ||
1336
- value.nodeAuthTokens.length < 3 // At least 3 auth tokens are required for Threshold OPRF service
1337
- ) {
1338
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InsufficientAuthToken);
1339
- }
1340
- if (!('refreshToken' in value) || typeof value.refreshToken !== 'string') {
1341
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidRefreshToken);
1338
+ try {
1339
+ (0, assertions_1.assertIsSeedlessOnboardingUserAuthenticated)(value);
1342
1340
  }
1343
- if (!('metadataAccessToken' in value) ||
1344
- typeof value.metadataAccessToken !== 'string') {
1345
- throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidMetadataAccessToken);
1341
+ catch (error) {
1342
+ this.update((state) => {
1343
+ state.isSeedlessOnboardingUserAuthenticated = false;
1344
+ });
1345
+ throw error;
1346
1346
  }
1347
1347
  }, _SeedlessOnboardingController_assertIsSRPBackedUpUser = function _SeedlessOnboardingController_assertIsSRPBackedUpUser(value) {
1348
1348
  if (!this.state.authPubKey) {