@metamask-previews/seedless-onboarding-controller 3.0.0-preview-c2598d9e → 3.0.0-preview-974a6a01
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 -10
- package/dist/SeedlessOnboardingController.cjs +7 -69
- package/dist/SeedlessOnboardingController.cjs.map +1 -1
- package/dist/SeedlessOnboardingController.d.cts +3 -12
- package/dist/SeedlessOnboardingController.d.cts.map +1 -1
- package/dist/SeedlessOnboardingController.d.mts +3 -12
- package/dist/SeedlessOnboardingController.d.mts.map +1 -1
- package/dist/SeedlessOnboardingController.mjs +7 -69
- package/dist/SeedlessOnboardingController.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -16
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -16
- 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,20 +7,10 @@ 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 `renewRefreshToken` options in SeedlessOnboardingController constructor - A function to renew the refresh token and get new revoke token. ([#6275](https://github.com/MetaMask/core/pull/6275))
|
|
13
|
-
- Added `renewRefreshToken` method to renew refresh token from client ([#6275](https://github.com/MetaMask/core/pull/6275))
|
|
14
|
-
- Added `revokePendingRefreshTokens` method to revoke all pending old refresh tokens instead from client ([#6275](https://github.com/MetaMask/core/pull/6275))
|
|
15
|
-
|
|
16
10
|
### Changed
|
|
17
11
|
|
|
18
12
|
- Bump `@metamask/base-controller` from `^8.1.0` to `^8.2.0` ([#6355](https://github.com/MetaMask/core/pull/6355))
|
|
19
13
|
|
|
20
|
-
### Removed
|
|
21
|
-
|
|
22
|
-
- Removed `revokeRefreshToken` method ([#6275](https://github.com/MetaMask/core/pull/6275))
|
|
23
|
-
|
|
24
14
|
## [3.0.0]
|
|
25
15
|
|
|
26
16
|
### Changed
|
|
@@ -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,
|
|
13
|
+
var _SeedlessOnboardingController_instances, _SeedlessOnboardingController_vaultEncryptor, _SeedlessOnboardingController_controllerOperationMutex, _SeedlessOnboardingController_vaultOperationMutex, _SeedlessOnboardingController_refreshJWTToken, _SeedlessOnboardingController_revokeRefreshToken, _SeedlessOnboardingController_passwordOutdatedCacheTTL, _SeedlessOnboardingController_isUnlocked, _SeedlessOnboardingController_cachedDecryptedVaultData, _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_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
15
|
exports.SeedlessOnboardingController = exports.getInitialSeedlessOnboardingControllerStateWithDefaults = void 0;
|
|
16
16
|
const auth_network_utils_1 = require("@metamask/auth-network-utils");
|
|
@@ -116,10 +116,6 @@ const seedlessOnboardingMetadata = {
|
|
|
116
116
|
persist: false,
|
|
117
117
|
anonymous: false,
|
|
118
118
|
},
|
|
119
|
-
pendingToBeRevokedTokens: {
|
|
120
|
-
persist: true,
|
|
121
|
-
anonymous: false,
|
|
122
|
-
},
|
|
123
119
|
// stays in vault
|
|
124
120
|
accessToken: {
|
|
125
121
|
persist: false,
|
|
@@ -156,10 +152,9 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
156
152
|
* @param options.network - The network to be used for the Seedless Onboarding flow.
|
|
157
153
|
* @param options.refreshJWTToken - A function to get a new jwt token using refresh token.
|
|
158
154
|
* @param options.revokeRefreshToken - A function to revoke the refresh token.
|
|
159
|
-
* @param options.renewRefreshToken - A function to renew the refresh token and get new revoke token.
|
|
160
155
|
* @param options.passwordOutdatedCacheTTL - The TTL of the password outdated cache in milliseconds.,
|
|
161
156
|
*/
|
|
162
|
-
constructor({ messenger, state, encryptor, toprfKeyDeriver, network = constants_1.Web3AuthNetwork.Mainnet, refreshJWTToken, revokeRefreshToken,
|
|
157
|
+
constructor({ messenger, state, encryptor, toprfKeyDeriver, network = constants_1.Web3AuthNetwork.Mainnet, refreshJWTToken, revokeRefreshToken, passwordOutdatedCacheTTL = constants_1.PASSWORD_OUTDATED_CACHE_TTL_MS, }) {
|
|
163
158
|
super({
|
|
164
159
|
name: constants_1.controllerName,
|
|
165
160
|
metadata: seedlessOnboardingMetadata,
|
|
@@ -172,7 +167,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
172
167
|
_SeedlessOnboardingController_vaultOperationMutex.set(this, new async_mutex_1.Mutex());
|
|
173
168
|
_SeedlessOnboardingController_refreshJWTToken.set(this, void 0);
|
|
174
169
|
_SeedlessOnboardingController_revokeRefreshToken.set(this, void 0);
|
|
175
|
-
_SeedlessOnboardingController_renewRefreshToken.set(this, void 0);
|
|
176
170
|
/**
|
|
177
171
|
* The TTL of the password outdated cache in milliseconds.
|
|
178
172
|
*/
|
|
@@ -199,7 +193,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
199
193
|
});
|
|
200
194
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_refreshJWTToken, refreshJWTToken, "f");
|
|
201
195
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_revokeRefreshToken, revokeRefreshToken, "f");
|
|
202
|
-
__classPrivateFieldSet(this, _SeedlessOnboardingController_renewRefreshToken, renewRefreshToken, "f");
|
|
203
196
|
// setup subscriptions to the keyring lock event
|
|
204
197
|
// when the keyring is locked (wallet is locked), the controller will be cleared of its credentials
|
|
205
198
|
this.messagingSystem.subscribe('KeyringController:lock', () => {
|
|
@@ -703,17 +696,17 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
703
696
|
}
|
|
704
697
|
}
|
|
705
698
|
/**
|
|
706
|
-
*
|
|
699
|
+
* Revoke the refresh token and get new refresh token and new revoke token
|
|
707
700
|
* and also updates the vault with the new revoke token.
|
|
708
701
|
* This method is to be called after user is authenticated.
|
|
709
702
|
*
|
|
710
703
|
* @param password - The password to encrypt the vault.
|
|
711
704
|
* @returns A Promise that resolves to void.
|
|
712
705
|
*/
|
|
713
|
-
async
|
|
706
|
+
async revokeRefreshToken(password) {
|
|
714
707
|
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
715
708
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
716
|
-
const {
|
|
709
|
+
const { vaultEncryptionKey } = this.state;
|
|
717
710
|
const { toprfEncryptionKey: rawToprfEncryptionKey, toprfPwEncryptionKey: rawToprfPwEncryptionKey, toprfAuthKeyPair: rawToprfAuthKeyPair, revokeToken, } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, {
|
|
718
711
|
password,
|
|
719
712
|
encryptionKey: vaultEncryptionKey,
|
|
@@ -721,7 +714,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
721
714
|
if (!revokeToken) {
|
|
722
715
|
throw new Error(constants_1.SeedlessOnboardingControllerErrorMessage.InvalidRevokeToken);
|
|
723
716
|
}
|
|
724
|
-
const { newRevokeToken, newRefreshToken } = await __classPrivateFieldGet(this,
|
|
717
|
+
const { newRevokeToken, newRefreshToken } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_revokeRefreshToken, "f").call(this, {
|
|
725
718
|
connection: this.state.authConnection,
|
|
726
719
|
revokeToken,
|
|
727
720
|
});
|
|
@@ -732,11 +725,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
732
725
|
// set new refresh token to persist in state
|
|
733
726
|
state.refreshToken = newRefreshToken;
|
|
734
727
|
});
|
|
735
|
-
// add the old refresh token to the list to be revoked later when possible
|
|
736
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_addRefreshTokenToRevokeList).call(this, {
|
|
737
|
-
refreshToken,
|
|
738
|
-
revokeToken,
|
|
739
|
-
});
|
|
740
728
|
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_createNewVaultWithAuthData).call(this, {
|
|
741
729
|
password,
|
|
742
730
|
rawToprfEncryptionKey,
|
|
@@ -746,49 +734,6 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
746
734
|
}
|
|
747
735
|
});
|
|
748
736
|
}
|
|
749
|
-
/**
|
|
750
|
-
* Revoke all pending refresh tokens.
|
|
751
|
-
*
|
|
752
|
-
* This method is to be called after user is authenticated.
|
|
753
|
-
*
|
|
754
|
-
* @returns A Promise that resolves to void.
|
|
755
|
-
*/
|
|
756
|
-
async revokePendingRefreshTokens() {
|
|
757
|
-
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
758
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
759
|
-
const { pendingToBeRevokedTokens } = this.state;
|
|
760
|
-
if (!pendingToBeRevokedTokens || pendingToBeRevokedTokens.length === 0) {
|
|
761
|
-
return;
|
|
762
|
-
}
|
|
763
|
-
// revoke all pending refresh tokens in parallel
|
|
764
|
-
const promises = pendingToBeRevokedTokens.map(({ revokeToken }) => {
|
|
765
|
-
const revokePromise = async () => {
|
|
766
|
-
try {
|
|
767
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_revokeRefreshToken, "f").call(this, {
|
|
768
|
-
connection: this.state.authConnection,
|
|
769
|
-
revokeToken,
|
|
770
|
-
});
|
|
771
|
-
return revokeToken;
|
|
772
|
-
}
|
|
773
|
-
catch (error) {
|
|
774
|
-
log('Error revoking refresh token', error);
|
|
775
|
-
return null;
|
|
776
|
-
}
|
|
777
|
-
};
|
|
778
|
-
return revokePromise();
|
|
779
|
-
});
|
|
780
|
-
const result = await Promise.all(promises); // no need to do Promise.allSettled because the promise already handle try catch
|
|
781
|
-
// filter out the null values
|
|
782
|
-
const revokedTokens = result.filter((token) => token !== null);
|
|
783
|
-
if (revokedTokens.length > 0) {
|
|
784
|
-
// update the state to remove the revoked tokens once all concurrent token revoke finish
|
|
785
|
-
this.update((state) => {
|
|
786
|
-
state.pendingToBeRevokedTokens =
|
|
787
|
-
state.pendingToBeRevokedTokens?.filter((token) => !revokedTokens.includes(token.revokeToken));
|
|
788
|
-
});
|
|
789
|
-
}
|
|
790
|
-
});
|
|
791
|
-
}
|
|
792
737
|
/**
|
|
793
738
|
* Check if the current node auth token is expired.
|
|
794
739
|
*
|
|
@@ -843,7 +788,7 @@ class SeedlessOnboardingController extends base_controller_1.BaseController {
|
|
|
843
788
|
}
|
|
844
789
|
}
|
|
845
790
|
exports.SeedlessOnboardingController = SeedlessOnboardingController;
|
|
846
|
-
_SeedlessOnboardingController_vaultEncryptor = new WeakMap(), _SeedlessOnboardingController_controllerOperationMutex = new WeakMap(), _SeedlessOnboardingController_vaultOperationMutex = new WeakMap(), _SeedlessOnboardingController_refreshJWTToken = new WeakMap(), _SeedlessOnboardingController_revokeRefreshToken = new WeakMap(),
|
|
791
|
+
_SeedlessOnboardingController_vaultEncryptor = new WeakMap(), _SeedlessOnboardingController_controllerOperationMutex = new WeakMap(), _SeedlessOnboardingController_vaultOperationMutex = new WeakMap(), _SeedlessOnboardingController_refreshJWTToken = new WeakMap(), _SeedlessOnboardingController_revokeRefreshToken = new WeakMap(), _SeedlessOnboardingController_passwordOutdatedCacheTTL = new WeakMap(), _SeedlessOnboardingController_isUnlocked = new WeakMap(), _SeedlessOnboardingController_cachedDecryptedVaultData = new WeakMap(), _SeedlessOnboardingController_instances = new WeakSet(), _SeedlessOnboardingController_submitGlobalPassword =
|
|
847
792
|
/**
|
|
848
793
|
* @description Submit the global password to the controller, verify the
|
|
849
794
|
* password validity and unlock the controller.
|
|
@@ -1433,13 +1378,6 @@ async function _SeedlessOnboardingController_assertPasswordInSync(options) {
|
|
|
1433
1378
|
this.update((state) => {
|
|
1434
1379
|
delete state.passwordOutdatedCache;
|
|
1435
1380
|
});
|
|
1436
|
-
}, _SeedlessOnboardingController_addRefreshTokenToRevokeList = function _SeedlessOnboardingController_addRefreshTokenToRevokeList({ refreshToken, revokeToken, }) {
|
|
1437
|
-
this.update((state) => {
|
|
1438
|
-
state.pendingToBeRevokedTokens = [
|
|
1439
|
-
...(state.pendingToBeRevokedTokens || []),
|
|
1440
|
-
{ refreshToken, revokeToken },
|
|
1441
|
-
];
|
|
1442
|
-
});
|
|
1443
1381
|
}, _SeedlessOnboardingController_isTokenExpiredError = function _SeedlessOnboardingController_isTokenExpiredError(error) {
|
|
1444
1382
|
if (error instanceof toprf_secure_backup_1.TOPRFError) {
|
|
1445
1383
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|