@metamask-previews/seedless-onboarding-controller 7.1.0-preview-85f1a30c → 7.1.0-preview-8a281087
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 -6
- package/dist/SeedlessOnboardingController.cjs +13 -65
- package/dist/SeedlessOnboardingController.cjs.map +1 -1
- package/dist/SeedlessOnboardingController.d.cts +2 -85
- package/dist/SeedlessOnboardingController.d.cts.map +1 -1
- package/dist/SeedlessOnboardingController.d.mts +2 -85
- package/dist/SeedlessOnboardingController.d.mts.map +1 -1
- package/dist/SeedlessOnboardingController.mjs +13 -65
- package/dist/SeedlessOnboardingController.mjs.map +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +67 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +67 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,12 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
### Added
|
|
11
|
-
|
|
12
|
-
- Added new public method, `getAccessToken`. ([#7800](https://github.com/MetaMask/core/pull/7800))
|
|
13
|
-
- Clients can use this method to get `accessToken` from the controller, instead of directly accessing from the state.
|
|
14
|
-
- This method also adds refresh token mechanism when `accessToken` is expired, hence preventing expired token usage in the clients.
|
|
15
|
-
|
|
16
10
|
### Changed
|
|
17
11
|
|
|
18
12
|
- Update StateMetadata's `includeInStateLogs` property. ([#7750](https://github.com/MetaMask/core/pull/7750))
|
|
@@ -10,12 +10,11 @@ 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_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_getAccessTokenAndRevokeToken, _SeedlessOnboardingController_withControllerLock, _SeedlessOnboardingController_withVaultLock, _SeedlessOnboardingController_parseVaultData, _SeedlessOnboardingController_assertIsUnlocked, _SeedlessOnboardingController_assertIsAuthenticatedUser, _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");
|
|
17
17
|
const base_controller_1 = require("@metamask/base-controller");
|
|
18
|
-
const messenger_1 = require("@metamask/messenger");
|
|
19
18
|
const toprf_secure_backup_1 = require("@metamask/toprf-secure-backup");
|
|
20
19
|
const utils_1 = require("@metamask/utils");
|
|
21
20
|
const aes_1 = require("@noble/ciphers/aes");
|
|
@@ -243,7 +242,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
243
242
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_refreshJWTToken, refreshJWTToken, "f");
|
|
244
243
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_revokeRefreshToken, revokeRefreshToken, "f");
|
|
245
244
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_renewRefreshToken, renewRefreshToken, "f");
|
|
246
|
-
this.messenger.registerActionHandler('SeedlessOnboardingController:getAccessToken', this.getAccessToken.bind(this));
|
|
247
245
|
}
|
|
248
246
|
async fetchMetadataAccessCreds() {
|
|
249
247
|
const { metadataAccessToken } = this.state;
|
|
@@ -770,8 +768,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
770
768
|
refreshToken,
|
|
771
769
|
skipLock: true,
|
|
772
770
|
});
|
|
773
|
-
// update the vault with new access token
|
|
774
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_updateVaultAfterAuthTokenRefresh).call(this, accessToken);
|
|
775
771
|
}
|
|
776
772
|
catch (error) {
|
|
777
773
|
log('Error refreshing node auth tokens', error);
|
|
@@ -862,21 +858,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
862
858
|
}
|
|
863
859
|
});
|
|
864
860
|
}
|
|
865
|
-
/**
|
|
866
|
-
* Get the access token from the state.
|
|
867
|
-
*
|
|
868
|
-
* If the tokens are expired, the method will refresh them and return the new access token.
|
|
869
|
-
*
|
|
870
|
-
* @returns The access token.
|
|
871
|
-
*/
|
|
872
|
-
async getAccessToken() {
|
|
873
|
-
return __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
874
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
875
|
-
return __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_executeWithTokenRefresh).call(this, async () => {
|
|
876
|
-
return this.state.accessToken;
|
|
877
|
-
}, 'getAccessToken');
|
|
878
|
-
});
|
|
879
|
-
}
|
|
880
861
|
/**
|
|
881
862
|
* Check if the current node auth token is expired.
|
|
882
863
|
*
|
|
@@ -1556,7 +1537,18 @@ async function _SeedlessOnboardingController_assertPasswordInSync(options) {
|
|
|
1556
1537
|
*/
|
|
1557
1538
|
async function _SeedlessOnboardingController_executeWithTokenRefresh(operation, operationName) {
|
|
1558
1539
|
try {
|
|
1559
|
-
|
|
1540
|
+
// proactively check for expired tokens and refresh them if needed
|
|
1541
|
+
const isNodeAuthTokenExpired = this.checkNodeAuthTokenExpired();
|
|
1542
|
+
const isMetadataAccessTokenExpired = this.checkMetadataAccessTokenExpired();
|
|
1543
|
+
// access token is only accessible when the vault is unlocked
|
|
1544
|
+
// so skip the check if the vault is locked
|
|
1545
|
+
let isAccessTokenExpired = false;
|
|
1546
|
+
if (__classPrivateFieldGet(this, _SeedlessOnboardingController_isUnlocked, "f")) {
|
|
1547
|
+
isAccessTokenExpired = this.checkAccessTokenExpired();
|
|
1548
|
+
}
|
|
1549
|
+
if (isNodeAuthTokenExpired ||
|
|
1550
|
+
isMetadataAccessTokenExpired ||
|
|
1551
|
+
isAccessTokenExpired) {
|
|
1560
1552
|
log(`JWT token expired during ${operationName}, attempting to refresh tokens`, 'node auth token exp check');
|
|
1561
1553
|
await this.refreshAuthTokens();
|
|
1562
1554
|
}
|
|
@@ -1582,50 +1574,6 @@ async function _SeedlessOnboardingController_executeWithTokenRefresh(operation,
|
|
|
1582
1574
|
throw error;
|
|
1583
1575
|
}
|
|
1584
1576
|
}
|
|
1585
|
-
}, _SeedlessOnboardingController_updateVaultAfterAuthTokenRefresh = async function _SeedlessOnboardingController_updateVaultAfterAuthTokenRefresh(accessToken) {
|
|
1586
|
-
if (!__classPrivateFieldGet(this, _SeedlessOnboardingController_isUnlocked, "f")) {
|
|
1587
|
-
// we just temporarily store the access token in the state
|
|
1588
|
-
// when user attempts to unlock the vault, we will use this access token to update the vault
|
|
1589
|
-
this.update((state) => {
|
|
1590
|
-
state.accessToken = accessToken;
|
|
1591
|
-
});
|
|
1592
|
-
return;
|
|
1593
|
-
}
|
|
1594
|
-
const { vaultEncryptionKey, vaultEncryptionSalt } = this.state;
|
|
1595
|
-
if (!vaultEncryptionKey ||
|
|
1596
|
-
!vaultEncryptionSalt ||
|
|
1597
|
-
!__classPrivateFieldGet(this, _SeedlessOnboardingController_cachedDecryptedVaultData, "f")) {
|
|
1598
|
-
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.MissingCredentials);
|
|
1599
|
-
}
|
|
1600
|
-
// update the cached decrypted vault data with the new access token
|
|
1601
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_cachedDecryptedVaultData, "f").accessToken = accessToken;
|
|
1602
|
-
const serializedVaultData = (0, utils_3.serializeVaultData)(__classPrivateFieldGet(this, _SeedlessOnboardingController_cachedDecryptedVaultData, "f"));
|
|
1603
|
-
const encryptionKey = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").importKey(vaultEncryptionKey);
|
|
1604
|
-
const updatedEncVault = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").encryptWithKey(encryptionKey, serializedVaultData);
|
|
1605
|
-
// NOTE: Referenced from keyring-controller!
|
|
1606
|
-
// We need to include the salt used to derive
|
|
1607
|
-
// the encryption key, to be able to derive it
|
|
1608
|
-
// from password again.
|
|
1609
|
-
updatedEncVault.salt = vaultEncryptionSalt;
|
|
1610
|
-
this.update((state) => {
|
|
1611
|
-
state.vault = JSON.stringify(updatedEncVault);
|
|
1612
|
-
state.vaultEncryptionSalt = vaultEncryptionSalt;
|
|
1613
|
-
state.accessToken = accessToken;
|
|
1614
|
-
state.vaultEncryptionKey = vaultEncryptionKey;
|
|
1615
|
-
});
|
|
1616
|
-
}, _SeedlessOnboardingController_checkTokensExpired = function _SeedlessOnboardingController_checkTokensExpired() {
|
|
1617
|
-
// proactively check for expired tokens and refresh them if needed
|
|
1618
|
-
const isNodeAuthTokenExpired = this.checkNodeAuthTokenExpired();
|
|
1619
|
-
const isMetadataAccessTokenExpired = this.checkMetadataAccessTokenExpired();
|
|
1620
|
-
// access token is only accessible when the vault is unlocked
|
|
1621
|
-
// so skip the check if the vault is locked
|
|
1622
|
-
let isAccessTokenExpired = false;
|
|
1623
|
-
if (__classPrivateFieldGet(this, _SeedlessOnboardingController_isUnlocked, "f")) {
|
|
1624
|
-
isAccessTokenExpired = this.checkAccessTokenExpired();
|
|
1625
|
-
}
|
|
1626
|
-
return (isNodeAuthTokenExpired ||
|
|
1627
|
-
isMetadataAccessTokenExpired ||
|
|
1628
|
-
isAccessTokenExpired);
|
|
1629
1577
|
};
|
|
1630
1578
|
/**
|
|
1631
1579
|
* Assert that the provided password is a valid non-empty string.
|