@metamask-previews/seedless-onboarding-controller 2.4.0-preview-c2e921a9 → 2.4.0-preview-ec3106a5
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/dist/SeedlessOnboardingController.cjs +43 -62
- package/dist/SeedlessOnboardingController.cjs.map +1 -1
- package/dist/SeedlessOnboardingController.d.cts +0 -8
- package/dist/SeedlessOnboardingController.d.cts.map +1 -1
- package/dist/SeedlessOnboardingController.d.mts +0 -8
- package/dist/SeedlessOnboardingController.d.mts.map +1 -1
- package/dist/SeedlessOnboardingController.mjs +43 -62
- package/dist/SeedlessOnboardingController.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -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,14 +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
|
-
const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair } = 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
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
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
|
+
}
|
|
504
508
|
});
|
|
505
509
|
}
|
|
506
510
|
/**
|
|
@@ -681,53 +685,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
681
685
|
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.AuthenticationError);
|
|
682
686
|
}
|
|
683
687
|
}
|
|
684
|
-
/**
|
|
685
|
-
* Revoke the refresh token and get new refresh token and new revoke token.
|
|
686
|
-
* This method is to be called after user is authenticated.
|
|
687
|
-
*
|
|
688
|
-
* @param password - The password to encrypt the vault.
|
|
689
|
-
* @returns A Promise that resolves to void.
|
|
690
|
-
*/
|
|
691
|
-
async revokeRefreshTokenAndUpdateVault(password) {
|
|
692
|
-
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
693
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
694
|
-
const { vaultEncryptionKey } = this.state;
|
|
695
|
-
const { toprfEncryptionKey: rawToprfEncryptionKey, toprfPwEncryptionKey: rawToprfPwEncryptionKey, toprfAuthKeyPair: rawToprfAuthKeyPair, revokeToken, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, password, vaultEncryptionKey);
|
|
696
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
697
|
-
if (!revokeToken) {
|
|
698
|
-
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidRevokeToken);
|
|
699
|
-
}
|
|
700
|
-
const { newRevokeToken, newRefreshToken } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_revokeRefreshToken, "f").call(this, {
|
|
701
|
-
connection: this.state.authConnection,
|
|
702
|
-
revokeToken,
|
|
703
|
-
});
|
|
704
|
-
const accessToken = __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_getAccessToken).call(this, password);
|
|
705
|
-
const { toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair } = __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_serializeKeyData).call(this, rawToprfEncryptionKey, rawToprfPwEncryptionKey, rawToprfAuthKeyPair);
|
|
706
|
-
const serializedVaultData = JSON.stringify({
|
|
707
|
-
toprfEncryptionKey,
|
|
708
|
-
toprfPwEncryptionKey,
|
|
709
|
-
toprfAuthKeyPair,
|
|
710
|
-
revokeToken: newRevokeToken,
|
|
711
|
-
accessToken,
|
|
712
|
-
});
|
|
713
|
-
// this function acquires the vault lock
|
|
714
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_updateVault).call(this, {
|
|
715
|
-
password,
|
|
716
|
-
serializedVaultData,
|
|
717
|
-
pwEncKey: rawToprfPwEncryptionKey,
|
|
718
|
-
});
|
|
719
|
-
// update the authPubKey in the state
|
|
720
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_persistAuthPubKey).call(this, {
|
|
721
|
-
authPubKey: rawToprfAuthKeyPair.pk,
|
|
722
|
-
});
|
|
723
|
-
this.update((state) => {
|
|
724
|
-
// set new revoke token in state temporarily for persisting in vault
|
|
725
|
-
state.revokeToken = newRevokeToken;
|
|
726
|
-
// set new refresh token to persist in state
|
|
727
|
-
state.refreshToken = newRefreshToken;
|
|
728
|
-
});
|
|
729
|
-
});
|
|
730
|
-
}
|
|
731
688
|
/**
|
|
732
689
|
* Check if the current node auth token is expired.
|
|
733
690
|
*
|
|
@@ -808,14 +765,19 @@ async function _SeedlessOnboardingController_submitGlobalPassword({ targetAuthPu
|
|
|
808
765
|
const { pwEncKey } = res;
|
|
809
766
|
const vaultKey = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_loadSeedlessEncryptionKey).call(this, pwEncKey);
|
|
810
767
|
// Unlock the controller
|
|
811
|
-
const { toprfEncryptionKey
|
|
768
|
+
const { revokeToken, toprfEncryptionKey, toprfPwEncryptionKey, toprfAuthKeyPair, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, undefined, vaultKey);
|
|
812
769
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
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
|
+
}
|
|
819
781
|
}
|
|
820
782
|
catch (error) {
|
|
821
783
|
if (__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_isTokenExpiredError).call(this, error)) {
|
|
@@ -1395,6 +1357,25 @@ async function _SeedlessOnboardingController_assertPasswordInSync(options) {
|
|
|
1395
1357
|
this.update((state) => {
|
|
1396
1358
|
delete state.passwordOutdatedCache;
|
|
1397
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
|
+
});
|
|
1398
1379
|
}, _SeedlessOnboardingController_isTokenExpiredError = function _SeedlessOnboardingController_isTokenExpiredError(error) {
|
|
1399
1380
|
if (error instanceof toprf_secure_backup_1.TOPRFError) {
|
|
1400
1381
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|