@metamask-previews/seedless-onboarding-controller 2.4.0-preview-848266f → 2.4.0-preview-0cb117e2
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 -2
- package/dist/SeedlessOnboardingController.cjs +43 -37
- package/dist/SeedlessOnboardingController.cjs.map +1 -1
- package/dist/SeedlessOnboardingController.d.cts +0 -9
- package/dist/SeedlessOnboardingController.d.cts.map +1 -1
- package/dist/SeedlessOnboardingController.d.mts +0 -9
- package/dist/SeedlessOnboardingController.d.mts.map +1 -1
- package/dist/SeedlessOnboardingController.mjs +43 -37
- package/dist/SeedlessOnboardingController.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -11,8 +11,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
11
11
|
|
|
12
12
|
- Added an optional parameter, `passwordOutdatedCacheTTL` to the constructor params and exported `SecretMetadata` class from the controller.([#6169](https://github.com/MetaMask/core/pull/6169))
|
|
13
13
|
|
|
14
|
-
- Added `revokeRefreshToken` function to revoke refresh token and update vault with the new revoke token.([#6187](https://github.com/MetaMask/core/pull/6187))
|
|
15
|
-
|
|
16
14
|
## [2.4.0]
|
|
17
15
|
|
|
18
16
|
### Fixed
|
|
@@ -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_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");
|
|
@@ -493,8 +493,18 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
493
493
|
*/
|
|
494
494
|
async submitPassword(password) {
|
|
495
495
|
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
496
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, password);
|
|
496
|
+
const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, revokeToken, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, password);
|
|
497
497
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
498
|
+
if (revokeToken) {
|
|
499
|
+
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_revokeRefreshTokenAndUpdateState).call(this, revokeToken);
|
|
500
|
+
// re-creating vault to persist the new revoke token
|
|
501
|
+
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_createNewVaultWithAuthData).call(this, {
|
|
502
|
+
password,
|
|
503
|
+
rawToprfEncryptionKey: toprfEncryptionKey,
|
|
504
|
+
rawToprfPwEncryptionKey: toprfPwEncryptionKey,
|
|
505
|
+
rawToprfAuthKeyPair: toprfAuthKeyPair,
|
|
506
|
+
});
|
|
507
|
+
}
|
|
498
508
|
});
|
|
499
509
|
}
|
|
500
510
|
/**
|
|
@@ -675,40 +685,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
675
685
|
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.AuthenticationError);
|
|
676
686
|
}
|
|
677
687
|
}
|
|
678
|
-
/**
|
|
679
|
-
* Revoke the refresh token and get new refresh token and new revoke token
|
|
680
|
-
* and also updates the vault with the new revoke token.
|
|
681
|
-
* This method is to be called after user is authenticated.
|
|
682
|
-
*
|
|
683
|
-
* @param password - The password to encrypt the vault.
|
|
684
|
-
* @returns A Promise that resolves to void.
|
|
685
|
-
*/
|
|
686
|
-
async revokeRefreshToken(password) {
|
|
687
|
-
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
688
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
689
|
-
const { vaultEncryptionKey } = this.state;
|
|
690
|
-
const { toprfEncryptionKey: rawToprfEncryptionKey, toprfPwEncryptionKey: rawToprfPwEncryptionKey, toprfAuthKeyPair: rawToprfAuthKeyPair, revokeToken, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, password, vaultEncryptionKey);
|
|
691
|
-
if (!revokeToken) {
|
|
692
|
-
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidRevokeToken);
|
|
693
|
-
}
|
|
694
|
-
const { newRevokeToken, newRefreshToken } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_revokeRefreshToken, "f").call(this, {
|
|
695
|
-
connection: this.state.authConnection,
|
|
696
|
-
revokeToken,
|
|
697
|
-
});
|
|
698
|
-
this.update((state) => {
|
|
699
|
-
// set new revoke token in state temporarily for persisting in vault
|
|
700
|
-
state.revokeToken = newRevokeToken;
|
|
701
|
-
// set new refresh token to persist in state
|
|
702
|
-
state.refreshToken = newRefreshToken;
|
|
703
|
-
});
|
|
704
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_createNewVaultWithAuthData).call(this, {
|
|
705
|
-
password,
|
|
706
|
-
rawToprfEncryptionKey,
|
|
707
|
-
rawToprfPwEncryptionKey,
|
|
708
|
-
rawToprfAuthKeyPair,
|
|
709
|
-
});
|
|
710
|
-
});
|
|
711
|
-
}
|
|
712
688
|
/**
|
|
713
689
|
* Check if the current node auth token is expired.
|
|
714
690
|
*
|
|
@@ -789,8 +765,19 @@ async function _SeedlessOnboardingController_submitGlobalPassword({ targetAuthPu
|
|
|
789
765
|
const { pwEncKey } = res;
|
|
790
766
|
const vaultKey = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_loadSeedlessEncryptionKey).call(this, pwEncKey);
|
|
791
767
|
// Unlock the controller
|
|
792
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, undefined, vaultKey);
|
|
768
|
+
const { revokeToken, toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, undefined, vaultKey);
|
|
793
769
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
770
|
+
if (revokeToken) {
|
|
771
|
+
// revoke and recyle refresh token after unlock to keep refresh token fresh, avoid malicious use of leaked refresh token
|
|
772
|
+
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_revokeRefreshTokenAndUpdateState).call(this, revokeToken);
|
|
773
|
+
// re-creating vault to persist the new revoke token
|
|
774
|
+
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_createNewVaultWithAuthData).call(this, {
|
|
775
|
+
password: globalPassword,
|
|
776
|
+
rawToprfEncryptionKey: toprfEncryptionKey,
|
|
777
|
+
rawToprfPwEncryptionKey: toprfPwEncryptionKey,
|
|
778
|
+
rawToprfAuthKeyPair: toprfAuthKeyPair,
|
|
779
|
+
});
|
|
780
|
+
}
|
|
794
781
|
}
|
|
795
782
|
catch (error) {
|
|
796
783
|
if (__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_isTokenExpiredError).call(this, error)) {
|
|
@@ -1370,6 +1357,25 @@ async function _SeedlessOnboardingController_assertPasswordInSync(options) {
|
|
|
1370
1357
|
this.update((state) => {
|
|
1371
1358
|
delete state.passwordOutdatedCache;
|
|
1372
1359
|
});
|
|
1360
|
+
}, _SeedlessOnboardingController_revokeRefreshTokenAndUpdateState =
|
|
1361
|
+
/**
|
|
1362
|
+
* Revoke the refresh token and get new refresh token and new revoke token.
|
|
1363
|
+
* This method is to be called after user is authenticated.
|
|
1364
|
+
*
|
|
1365
|
+
* @param revokeToken - The revoke token to use for revoking the refresh token.
|
|
1366
|
+
*/
|
|
1367
|
+
async function _SeedlessOnboardingController_revokeRefreshTokenAndUpdateState(revokeToken) {
|
|
1368
|
+
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
1369
|
+
const { newRevokeToken, newRefreshToken } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_revokeRefreshToken, "f").call(this, {
|
|
1370
|
+
connection: this.state.authConnection,
|
|
1371
|
+
revokeToken,
|
|
1372
|
+
});
|
|
1373
|
+
this.update((state) => {
|
|
1374
|
+
// set new revoke token in state temporarily for persisting in vault
|
|
1375
|
+
state.revokeToken = newRevokeToken;
|
|
1376
|
+
// set new refresh token to persist in state
|
|
1377
|
+
state.refreshToken = newRefreshToken;
|
|
1378
|
+
});
|
|
1373
1379
|
}, _SeedlessOnboardingController_isTokenExpiredError = function _SeedlessOnboardingController_isTokenExpiredError(error) {
|
|
1374
1380
|
if (error instanceof toprf_secure_backup_1.TOPRFError) {
|
|
1375
1381
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|