@metamask-previews/seedless-onboarding-controller 7.1.0-preview-40468f94 → 7.1.0-preview-fb7aa07ff
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 -12
- package/dist/SeedlessOnboardingController.cjs +21 -128
- package/dist/SeedlessOnboardingController.cjs.map +1 -1
- package/dist/SeedlessOnboardingController.d.cts +3 -86
- package/dist/SeedlessOnboardingController.d.cts.map +1 -1
- package/dist/SeedlessOnboardingController.d.mts +3 -86
- package/dist/SeedlessOnboardingController.d.mts.map +1 -1
- package/dist/SeedlessOnboardingController.mjs +22 -129
- 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/dist/utils.cjs +1 -31
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +0 -8
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.mts +0 -8
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +0 -29
- package/dist/utils.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,85 +1,11 @@
|
|
|
1
1
|
import { BaseController } from "@metamask/base-controller";
|
|
2
|
-
import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
|
|
3
2
|
import type * as encryptionUtils from "@metamask/browser-passworder";
|
|
4
|
-
import { Messenger } from "@metamask/messenger";
|
|
5
3
|
import type { AuthenticateResult, SEC1EncodedPublicKey } from "@metamask/toprf-secure-backup";
|
|
6
4
|
import { ToprfSecureBackup } from "@metamask/toprf-secure-backup";
|
|
7
5
|
import type { AuthConnection } from "./constants.cjs";
|
|
8
|
-
import { controllerName, SecretType
|
|
6
|
+
import { controllerName, SecretType } from "./constants.cjs";
|
|
9
7
|
import { SecretMetadata } from "./SecretMetadata.cjs";
|
|
10
|
-
import type {
|
|
11
|
-
export type SeedlessOnboardingControllerGetStateAction = ControllerGetStateAction<typeof controllerName, SeedlessOnboardingControllerState>;
|
|
12
|
-
/**
|
|
13
|
-
* Get the access token from the controller.
|
|
14
|
-
* If the tokens are expired, the method will refresh them and return the new access token.
|
|
15
|
-
*
|
|
16
|
-
* @returns The access token.
|
|
17
|
-
*/
|
|
18
|
-
export type SeedlessOnboardingControllerGetAccessTokenAction = {
|
|
19
|
-
type: `${typeof controllerName}:getAccessToken`;
|
|
20
|
-
handler: SeedlessOnboardingController<encryptionUtils.EncryptionKey, encryptionUtils.KeyDerivationOptions>['getAccessToken'];
|
|
21
|
-
};
|
|
22
|
-
export type SeedlessOnboardingControllerActions = SeedlessOnboardingControllerGetStateAction | SeedlessOnboardingControllerGetAccessTokenAction;
|
|
23
|
-
type AllowedActions = never;
|
|
24
|
-
export type SeedlessOnboardingControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, SeedlessOnboardingControllerState>;
|
|
25
|
-
export type SeedlessOnboardingControllerEvents = SeedlessOnboardingControllerStateChangeEvent;
|
|
26
|
-
type AllowedEvents = never;
|
|
27
|
-
export type SeedlessOnboardingControllerMessenger = Messenger<typeof controllerName, SeedlessOnboardingControllerActions | AllowedActions, SeedlessOnboardingControllerEvents | AllowedEvents>;
|
|
28
|
-
/**
|
|
29
|
-
* Seedless Onboarding Controller Options.
|
|
30
|
-
*
|
|
31
|
-
* @param messenger - The messenger to use for this controller.
|
|
32
|
-
* @param state - The initial state to set on this controller.
|
|
33
|
-
* @param encryptor - The encryptor to use for encrypting and decrypting seedless onboarding vault.
|
|
34
|
-
*/
|
|
35
|
-
export type SeedlessOnboardingControllerOptions<EncryptionKey, SupportedKeyDerivationParams> = {
|
|
36
|
-
messenger: SeedlessOnboardingControllerMessenger;
|
|
37
|
-
/**
|
|
38
|
-
* Initial state to set on this controller.
|
|
39
|
-
*/
|
|
40
|
-
state?: Partial<SeedlessOnboardingControllerState>;
|
|
41
|
-
/**
|
|
42
|
-
* Encryptor to use for encrypting and decrypting seedless onboarding vault.
|
|
43
|
-
*
|
|
44
|
-
* @default browser-passworder @link https://github.com/MetaMask/browser-passworder
|
|
45
|
-
*/
|
|
46
|
-
encryptor: VaultEncryptor<EncryptionKey, SupportedKeyDerivationParams>;
|
|
47
|
-
/**
|
|
48
|
-
* A function to get a new jwt token using refresh token.
|
|
49
|
-
*/
|
|
50
|
-
refreshJWTToken: RefreshJWTToken;
|
|
51
|
-
/**
|
|
52
|
-
* A function to revoke the refresh token.
|
|
53
|
-
*/
|
|
54
|
-
revokeRefreshToken: RevokeRefreshToken;
|
|
55
|
-
/**
|
|
56
|
-
* A function to renew the refresh token and get new revoke token.
|
|
57
|
-
*/
|
|
58
|
-
renewRefreshToken: RenewRefreshToken;
|
|
59
|
-
/**
|
|
60
|
-
* Optional key derivation interface for the TOPRF client.
|
|
61
|
-
*
|
|
62
|
-
* If provided, it will be used as an additional step during
|
|
63
|
-
* key derivation. This can be used, for example, to inject a slow key
|
|
64
|
-
* derivation step to protect against local brute force attacks on the
|
|
65
|
-
* password.
|
|
66
|
-
*
|
|
67
|
-
* @default browser-passworder @link https://github.com/MetaMask/browser-passworder
|
|
68
|
-
*/
|
|
69
|
-
toprfKeyDeriver?: ToprfKeyDeriver;
|
|
70
|
-
/**
|
|
71
|
-
* Type of Web3Auth network to be used for the Seedless Onboarding flow.
|
|
72
|
-
*
|
|
73
|
-
* @default Web3AuthNetwork.Mainnet
|
|
74
|
-
*/
|
|
75
|
-
network?: Web3AuthNetwork;
|
|
76
|
-
/**
|
|
77
|
-
* The TTL of the password outdated cache in milliseconds.
|
|
78
|
-
*
|
|
79
|
-
* @default PASSWORD_OUTDATED_CACHE_TTL_MS
|
|
80
|
-
*/
|
|
81
|
-
passwordOutdatedCacheTTL?: number;
|
|
82
|
-
};
|
|
8
|
+
import type { SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, SocialBackupsMetadata } from "./types.cjs";
|
|
83
9
|
/**
|
|
84
10
|
* Get the initial state for the Seedless Onboarding Controller with defaults.
|
|
85
11
|
*
|
|
@@ -221,7 +147,7 @@ export declare class SeedlessOnboardingController<EncryptionKey, SupportedKeyDer
|
|
|
221
147
|
/**
|
|
222
148
|
* Submit the password to the controller, verify the password validity and unlock the controller.
|
|
223
149
|
*
|
|
224
|
-
* This method will be used especially when user unlock the wallet.
|
|
150
|
+
* This method will be used especially when user rehydrate/unlock the wallet.
|
|
225
151
|
* The provided password will be verified against the encrypted vault, encryption key will be derived and saved in the controller state.
|
|
226
152
|
*
|
|
227
153
|
* This operation is useful when user performs some actions that requires the user password/encryption key. e.g. add new srp backup
|
|
@@ -333,14 +259,6 @@ export declare class SeedlessOnboardingController<EncryptionKey, SupportedKeyDer
|
|
|
333
259
|
* @returns A Promise that resolves to void.
|
|
334
260
|
*/
|
|
335
261
|
revokePendingRefreshTokens(): Promise<void>;
|
|
336
|
-
/**
|
|
337
|
-
* Get the access token from the state.
|
|
338
|
-
*
|
|
339
|
-
* If the tokens are expired, the method will refresh them and return the new access token.
|
|
340
|
-
*
|
|
341
|
-
* @returns The access token.
|
|
342
|
-
*/
|
|
343
|
-
getAccessToken(): Promise<string | undefined>;
|
|
344
262
|
/**
|
|
345
263
|
* Check if the current node auth token is expired.
|
|
346
264
|
*
|
|
@@ -361,5 +279,4 @@ export declare class SeedlessOnboardingController<EncryptionKey, SupportedKeyDer
|
|
|
361
279
|
*/
|
|
362
280
|
checkAccessTokenExpired(): boolean;
|
|
363
281
|
}
|
|
364
|
-
export {};
|
|
365
282
|
//# sourceMappingURL=SeedlessOnboardingController.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeedlessOnboardingController.d.cts","sourceRoot":"","sources":["../src/SeedlessOnboardingController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;
|
|
1
|
+
{"version":3,"file":"SeedlessOnboardingController.d.cts","sourceRoot":"","sources":["../src/SeedlessOnboardingController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,85 +1,11 @@
|
|
|
1
1
|
import { BaseController } from "@metamask/base-controller";
|
|
2
|
-
import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
|
|
3
2
|
import type * as encryptionUtils from "@metamask/browser-passworder";
|
|
4
|
-
import { Messenger } from "@metamask/messenger";
|
|
5
3
|
import type { AuthenticateResult, SEC1EncodedPublicKey } from "@metamask/toprf-secure-backup";
|
|
6
4
|
import { ToprfSecureBackup } from "@metamask/toprf-secure-backup";
|
|
7
5
|
import type { AuthConnection } from "./constants.mjs";
|
|
8
|
-
import { controllerName, SecretType
|
|
6
|
+
import { controllerName, SecretType } from "./constants.mjs";
|
|
9
7
|
import { SecretMetadata } from "./SecretMetadata.mjs";
|
|
10
|
-
import type {
|
|
11
|
-
export type SeedlessOnboardingControllerGetStateAction = ControllerGetStateAction<typeof controllerName, SeedlessOnboardingControllerState>;
|
|
12
|
-
/**
|
|
13
|
-
* Get the access token from the controller.
|
|
14
|
-
* If the tokens are expired, the method will refresh them and return the new access token.
|
|
15
|
-
*
|
|
16
|
-
* @returns The access token.
|
|
17
|
-
*/
|
|
18
|
-
export type SeedlessOnboardingControllerGetAccessTokenAction = {
|
|
19
|
-
type: `${typeof controllerName}:getAccessToken`;
|
|
20
|
-
handler: SeedlessOnboardingController<encryptionUtils.EncryptionKey, encryptionUtils.KeyDerivationOptions>['getAccessToken'];
|
|
21
|
-
};
|
|
22
|
-
export type SeedlessOnboardingControllerActions = SeedlessOnboardingControllerGetStateAction | SeedlessOnboardingControllerGetAccessTokenAction;
|
|
23
|
-
type AllowedActions = never;
|
|
24
|
-
export type SeedlessOnboardingControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, SeedlessOnboardingControllerState>;
|
|
25
|
-
export type SeedlessOnboardingControllerEvents = SeedlessOnboardingControllerStateChangeEvent;
|
|
26
|
-
type AllowedEvents = never;
|
|
27
|
-
export type SeedlessOnboardingControllerMessenger = Messenger<typeof controllerName, SeedlessOnboardingControllerActions | AllowedActions, SeedlessOnboardingControllerEvents | AllowedEvents>;
|
|
28
|
-
/**
|
|
29
|
-
* Seedless Onboarding Controller Options.
|
|
30
|
-
*
|
|
31
|
-
* @param messenger - The messenger to use for this controller.
|
|
32
|
-
* @param state - The initial state to set on this controller.
|
|
33
|
-
* @param encryptor - The encryptor to use for encrypting and decrypting seedless onboarding vault.
|
|
34
|
-
*/
|
|
35
|
-
export type SeedlessOnboardingControllerOptions<EncryptionKey, SupportedKeyDerivationParams> = {
|
|
36
|
-
messenger: SeedlessOnboardingControllerMessenger;
|
|
37
|
-
/**
|
|
38
|
-
* Initial state to set on this controller.
|
|
39
|
-
*/
|
|
40
|
-
state?: Partial<SeedlessOnboardingControllerState>;
|
|
41
|
-
/**
|
|
42
|
-
* Encryptor to use for encrypting and decrypting seedless onboarding vault.
|
|
43
|
-
*
|
|
44
|
-
* @default browser-passworder @link https://github.com/MetaMask/browser-passworder
|
|
45
|
-
*/
|
|
46
|
-
encryptor: VaultEncryptor<EncryptionKey, SupportedKeyDerivationParams>;
|
|
47
|
-
/**
|
|
48
|
-
* A function to get a new jwt token using refresh token.
|
|
49
|
-
*/
|
|
50
|
-
refreshJWTToken: RefreshJWTToken;
|
|
51
|
-
/**
|
|
52
|
-
* A function to revoke the refresh token.
|
|
53
|
-
*/
|
|
54
|
-
revokeRefreshToken: RevokeRefreshToken;
|
|
55
|
-
/**
|
|
56
|
-
* A function to renew the refresh token and get new revoke token.
|
|
57
|
-
*/
|
|
58
|
-
renewRefreshToken: RenewRefreshToken;
|
|
59
|
-
/**
|
|
60
|
-
* Optional key derivation interface for the TOPRF client.
|
|
61
|
-
*
|
|
62
|
-
* If provided, it will be used as an additional step during
|
|
63
|
-
* key derivation. This can be used, for example, to inject a slow key
|
|
64
|
-
* derivation step to protect against local brute force attacks on the
|
|
65
|
-
* password.
|
|
66
|
-
*
|
|
67
|
-
* @default browser-passworder @link https://github.com/MetaMask/browser-passworder
|
|
68
|
-
*/
|
|
69
|
-
toprfKeyDeriver?: ToprfKeyDeriver;
|
|
70
|
-
/**
|
|
71
|
-
* Type of Web3Auth network to be used for the Seedless Onboarding flow.
|
|
72
|
-
*
|
|
73
|
-
* @default Web3AuthNetwork.Mainnet
|
|
74
|
-
*/
|
|
75
|
-
network?: Web3AuthNetwork;
|
|
76
|
-
/**
|
|
77
|
-
* The TTL of the password outdated cache in milliseconds.
|
|
78
|
-
*
|
|
79
|
-
* @default PASSWORD_OUTDATED_CACHE_TTL_MS
|
|
80
|
-
*/
|
|
81
|
-
passwordOutdatedCacheTTL?: number;
|
|
82
|
-
};
|
|
8
|
+
import type { SeedlessOnboardingControllerMessenger, SeedlessOnboardingControllerOptions, SeedlessOnboardingControllerState, SocialBackupsMetadata } from "./types.mjs";
|
|
83
9
|
/**
|
|
84
10
|
* Get the initial state for the Seedless Onboarding Controller with defaults.
|
|
85
11
|
*
|
|
@@ -221,7 +147,7 @@ export declare class SeedlessOnboardingController<EncryptionKey, SupportedKeyDer
|
|
|
221
147
|
/**
|
|
222
148
|
* Submit the password to the controller, verify the password validity and unlock the controller.
|
|
223
149
|
*
|
|
224
|
-
* This method will be used especially when user unlock the wallet.
|
|
150
|
+
* This method will be used especially when user rehydrate/unlock the wallet.
|
|
225
151
|
* The provided password will be verified against the encrypted vault, encryption key will be derived and saved in the controller state.
|
|
226
152
|
*
|
|
227
153
|
* This operation is useful when user performs some actions that requires the user password/encryption key. e.g. add new srp backup
|
|
@@ -333,14 +259,6 @@ export declare class SeedlessOnboardingController<EncryptionKey, SupportedKeyDer
|
|
|
333
259
|
* @returns A Promise that resolves to void.
|
|
334
260
|
*/
|
|
335
261
|
revokePendingRefreshTokens(): Promise<void>;
|
|
336
|
-
/**
|
|
337
|
-
* Get the access token from the state.
|
|
338
|
-
*
|
|
339
|
-
* If the tokens are expired, the method will refresh them and return the new access token.
|
|
340
|
-
*
|
|
341
|
-
* @returns The access token.
|
|
342
|
-
*/
|
|
343
|
-
getAccessToken(): Promise<string | undefined>;
|
|
344
262
|
/**
|
|
345
263
|
* Check if the current node auth token is expired.
|
|
346
264
|
*
|
|
@@ -361,5 +279,4 @@ export declare class SeedlessOnboardingController<EncryptionKey, SupportedKeyDer
|
|
|
361
279
|
*/
|
|
362
280
|
checkAccessTokenExpired(): boolean;
|
|
363
281
|
}
|
|
364
|
-
export {};
|
|
365
282
|
//# sourceMappingURL=SeedlessOnboardingController.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeedlessOnboardingController.d.mts","sourceRoot":"","sources":["../src/SeedlessOnboardingController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;
|
|
1
|
+
{"version":3,"file":"SeedlessOnboardingController.d.mts","sourceRoot":"","sources":["../src/SeedlessOnboardingController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAE3D,OAAO,KAAK,KAAK,eAAe,qCAAqC;AACrE,OAAO,KAAK,EACV,kBAAkB,EAIlB,oBAAoB,EACrB,sCAAsC;AACvC,OAAO,EACL,iBAAiB,EAGlB,sCAAsC;AAiBvC,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAoB;AAClD,OAAO,EACL,cAAc,EAEd,UAAU,EAGX,wBAAoB;AAGrB,OAAO,EAAE,cAAc,EAAE,6BAAyB;AAClD,OAAO,KAAK,EAEV,qCAAqC,EACrC,mCAAmC,EACnC,iCAAiC,EAEjC,qBAAqB,EAOtB,oBAAgB;AAUjB;;;;;GAKG;AACH,wBAAgB,uDAAuD,CACrE,SAAS,CAAC,EAAE,OAAO,CAAC,iCAAiC,CAAC,GACrD,iCAAiC,CAenC;AA2ID,qBAAa,4BAA4B,CACvC,aAAa,EACb,6BAA6B,GAAG,eAAe,CAAC,oBAAoB,CACpE,SAAQ,cAAc,CACtB,OAAO,cAAc,EACrB,iCAAiC,EACjC,qCAAqC,CACtC;;IAUC,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC;IA2BxC;;;;;;;;;;;;;OAaG;gBACS,EACV,SAAS,EACT,KAAK,EACL,SAAS,EACT,eAAe,EACf,OAAiC,EACjC,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,wBAAyD,GAC1D,EAAE,mCAAmC,CACpC,aAAa,EACb,6BAA6B,CAC9B;IAuBK,wBAAwB,IAAI,OAAO,CAAC;QACxC,mBAAmB,EAAE,MAAM,CAAC;KAC7B,CAAC;IAyBF;;;OAGG;IACG,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9C;;;;;;;;;;;;;;;;;OAiBG;IACG,YAAY,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE,cAAc,CAAC;QAC/B,gBAAgB,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;QACf,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyD/B;;;;;;;OAOG;IACG,iCAAiC,CACrC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IA4ChB;;;;;;;;OAQG;IACG,gBAAgB,CACpB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,UAAU,EAChB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GACA,OAAO,CAAC,IAAI,CAAC;IA4BhB;;;;;;;OAOG;IACG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA4CtE;;;;;;;;OAQG;IACG,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC;IA6DhB;;;;;;OAMG;IACH,yBAAyB,CACvB,UAAU,EACN,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,GAC5D,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,EAAE,GACjE,IAAI;IAMP;;;;;;;;OAQG;IACG,mBAAmB,CACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,GACA,OAAO,CAAC,IAAI,CAAC;IAYhB;;;;;;;;OAQG;IACH,wBAAwB,CACtB,IAAI,EAAE,UAAU,EAChB,IAAI,GAAE,UAAgC,GACrC,qBAAqB,GAAG,SAAS;IAOpC;;;;;;;;;;OAUG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD;;;;;;OAMG;IACG,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAchC;;;;;;;;OAQG;IACG,wBAAwB,CAAC,EAC7B,cAAc,GACf,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBjB;;;;;;;OAOG;IACG,oBAAoB,CAAC,EACzB,cAAc,EACd,iBAAqB,GACtB,EAAE;QACD,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEjB;;;;;;;;;OASG;IACG,uBAAuB,CAAC,OAAO,CAAC,EAAE;QACtC,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;KACzC,GAAG,OAAO,CAAC,OAAO,CAAC;IAiEpB;;;;;;;;;;OAUG;IACG,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC;IAahD;;OAEG;IACH,UAAU,IAAI,IAAI;IAuDlB;;;;;OAKG;IACG,yBAAyB,CAAC,oBAAoB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5E;;;;;OAKG;IACG,wBAAwB,IAAI,OAAO,CAAC,MAAM,CAAC;IAuvBjD;;;;;;;OAOG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAqCxC;;;;;;;OAOG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6CxD;;;;;;OAMG;IACG,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAmKjD;;;;OAIG;IACI,yBAAyB,IAAI,OAAO;IAY3C;;;;OAIG;IACI,+BAA+B,IAAI,OAAO;IAYjD;;;;;OAKG;IACI,uBAAuB,IAAI,OAAO;CAa1C"}
|
|
@@ -9,10 +9,9 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
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");
|
|
10
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
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
|
|
12
|
+
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
13
|
import { keccak256AndHexify } from "@metamask/auth-network-utils";
|
|
14
14
|
import { BaseController } from "@metamask/base-controller";
|
|
15
|
-
import { Messenger } from "@metamask/messenger";
|
|
16
15
|
import { ToprfSecureBackup, TOPRFErrorCode, TOPRFError } from "@metamask/toprf-secure-backup";
|
|
17
16
|
import { base64ToBytes, bytesToBase64, isNullOrUndefined } from "@metamask/utils";
|
|
18
17
|
import { gcm } from "@noble/ciphers/aes";
|
|
@@ -25,7 +24,7 @@ import { controllerName, PASSWORD_OUTDATED_CACHE_TTL_MS, SecretType, SeedlessOnb
|
|
|
25
24
|
import { PasswordSyncError, RecoveryError } from "./errors.mjs";
|
|
26
25
|
import { projectLogger, createModuleLogger } from "./logger.mjs";
|
|
27
26
|
import { SecretMetadata } from "./SecretMetadata.mjs";
|
|
28
|
-
import {
|
|
27
|
+
import { decodeJWTToken, decodeNodeAuthToken, deserializeVaultData, serializeVaultData } from "./utils.mjs";
|
|
29
28
|
const log = createModuleLogger(projectLogger, controllerName);
|
|
30
29
|
/**
|
|
31
30
|
* Get the initial state for the Seedless Onboarding Controller with defaults.
|
|
@@ -239,7 +238,6 @@ export class SeedlessOnboardingController extends BaseController {
|
|
|
239
238
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_refreshJWTToken, refreshJWTToken, "f");
|
|
240
239
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_revokeRefreshToken, revokeRefreshToken, "f");
|
|
241
240
|
__classPrivateFieldSet(this, _SeedlessOnboardingController_renewRefreshToken, renewRefreshToken, "f");
|
|
242
|
-
this.messenger.registerActionHandler('SeedlessOnboardingController:getAccessToken', this.getAccessToken.bind(this));
|
|
243
241
|
}
|
|
244
242
|
async fetchMetadataAccessCreds() {
|
|
245
243
|
const { metadataAccessToken } = this.state;
|
|
@@ -550,7 +548,7 @@ export class SeedlessOnboardingController extends BaseController {
|
|
|
550
548
|
/**
|
|
551
549
|
* Submit the password to the controller, verify the password validity and unlock the controller.
|
|
552
550
|
*
|
|
553
|
-
* This method will be used especially when user unlock the wallet.
|
|
551
|
+
* This method will be used especially when user rehydrate/unlock the wallet.
|
|
554
552
|
* The provided password will be verified against the encrypted vault, encryption key will be derived and saved in the controller state.
|
|
555
553
|
*
|
|
556
554
|
* This operation is useful when user performs some actions that requires the user password/encryption key. e.g. add new srp backup
|
|
@@ -560,37 +558,7 @@ export class SeedlessOnboardingController extends BaseController {
|
|
|
560
558
|
*/
|
|
561
559
|
async submitPassword(password) {
|
|
562
560
|
return await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
563
|
-
|
|
564
|
-
const { accessToken: accessTokenBeforeUnlock } = this.state;
|
|
565
|
-
const deserializedVaultData = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, {
|
|
566
|
-
password,
|
|
567
|
-
});
|
|
568
|
-
const { accessToken: accessTokenAfterUnlock } = this.state;
|
|
569
|
-
let latestAccessToken = accessTokenAfterUnlock;
|
|
570
|
-
// compare the access token from state before unlocking and after unlocking, take the latest access token if it's different.
|
|
571
|
-
if (accessTokenBeforeUnlock &&
|
|
572
|
-
accessTokenAfterUnlock &&
|
|
573
|
-
accessTokenBeforeUnlock !== accessTokenAfterUnlock) {
|
|
574
|
-
// If there was an access token in the state before unlocking, it might be the token set from the `refreshAuthTokens` method.
|
|
575
|
-
// Compare it with the access token value from decrypted vault after unlocking and take the latest access token.
|
|
576
|
-
latestAccessToken = compareAndGetLatestToken(accessTokenBeforeUnlock, accessTokenAfterUnlock);
|
|
577
|
-
}
|
|
578
|
-
// update the state and vault with the latest access token if it's different from the current access token in the state.
|
|
579
|
-
if (latestAccessToken && latestAccessToken !== accessTokenAfterUnlock) {
|
|
580
|
-
// update the access token in the state with the latest access token if it's different from the decrypted access token after unlocking
|
|
581
|
-
this.update((state) => {
|
|
582
|
-
state.accessToken = latestAccessToken;
|
|
583
|
-
});
|
|
584
|
-
const updatedVaultData = {
|
|
585
|
-
...deserializedVaultData,
|
|
586
|
-
accessToken: latestAccessToken,
|
|
587
|
-
};
|
|
588
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_updateVault).call(this, {
|
|
589
|
-
password,
|
|
590
|
-
vaultData: updatedVaultData,
|
|
591
|
-
pwEncKey: deserializedVaultData.toprfPwEncryptionKey,
|
|
592
|
-
});
|
|
593
|
-
}
|
|
561
|
+
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, { password });
|
|
594
562
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
595
563
|
});
|
|
596
564
|
}
|
|
@@ -796,8 +764,6 @@ export class SeedlessOnboardingController extends BaseController {
|
|
|
796
764
|
refreshToken,
|
|
797
765
|
skipLock: true,
|
|
798
766
|
});
|
|
799
|
-
// update the vault with new access token
|
|
800
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_updateVaultAfterAuthTokenRefresh).call(this, accessToken);
|
|
801
767
|
}
|
|
802
768
|
catch (error) {
|
|
803
769
|
log('Error refreshing node auth tokens', error);
|
|
@@ -888,21 +854,6 @@ export class SeedlessOnboardingController extends BaseController {
|
|
|
888
854
|
}
|
|
889
855
|
});
|
|
890
856
|
}
|
|
891
|
-
/**
|
|
892
|
-
* Get the access token from the state.
|
|
893
|
-
*
|
|
894
|
-
* If the tokens are expired, the method will refresh them and return the new access token.
|
|
895
|
-
*
|
|
896
|
-
* @returns The access token.
|
|
897
|
-
*/
|
|
898
|
-
async getAccessToken() {
|
|
899
|
-
return __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withControllerLock).call(this, async () => {
|
|
900
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_assertIsAuthenticatedUser).call(this, this.state);
|
|
901
|
-
return __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_executeWithTokenRefresh).call(this, async () => {
|
|
902
|
-
return this.state.accessToken;
|
|
903
|
-
}, 'getAccessToken');
|
|
904
|
-
});
|
|
905
|
-
}
|
|
906
857
|
/**
|
|
907
858
|
* Check if the current node auth token is expired.
|
|
908
859
|
*
|
|
@@ -970,39 +921,22 @@ _SeedlessOnboardingController_vaultEncryptor = new WeakMap(), _SeedlessOnboardin
|
|
|
970
921
|
* corresponding to the current authPubKey in state.
|
|
971
922
|
*/
|
|
972
923
|
async function _SeedlessOnboardingController_submitGlobalPassword({ targetAuthPubKey, globalPassword, maxKeyChainLength, }) {
|
|
973
|
-
const { pwEncKey:
|
|
924
|
+
const { pwEncKey: curPwEncKey, authKeyPair: curAuthKeyPair } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_recoverEncKey).call(this, globalPassword);
|
|
974
925
|
try {
|
|
975
926
|
// Recover vault encryption key.
|
|
976
927
|
const res = await this.toprfClient.recoverPwEncKey({
|
|
977
928
|
targetAuthPubKey,
|
|
978
|
-
curPwEncKey
|
|
979
|
-
curAuthKeyPair
|
|
929
|
+
curPwEncKey,
|
|
930
|
+
curAuthKeyPair,
|
|
980
931
|
maxPwChainLength: maxKeyChainLength,
|
|
981
932
|
});
|
|
982
933
|
const { pwEncKey } = res;
|
|
983
934
|
const vaultKey = await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_loadSeedlessEncryptionKey).call(this, pwEncKey);
|
|
984
|
-
// accessToken before unlocking vault and flooding the state with values from the decrypted vault
|
|
985
|
-
// it might be the new token set from the `refreshAuthTokens` method.
|
|
986
|
-
const { accessToken: accessTokenBeforeUnlock } = this.state;
|
|
987
935
|
// Unlock the controller
|
|
988
|
-
|
|
936
|
+
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_unlockVaultAndGetVaultData).call(this, {
|
|
989
937
|
encryptionKey: vaultKey,
|
|
990
938
|
});
|
|
991
939
|
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_setUnlocked).call(this);
|
|
992
|
-
// accessToken from decrypted vault
|
|
993
|
-
const accessTokenFromDecryptedVault = decryptedVaultData.accessToken;
|
|
994
|
-
// compare the two access tokens, take the latest access token if it's different.
|
|
995
|
-
if (accessTokenBeforeUnlock &&
|
|
996
|
-
accessTokenFromDecryptedVault &&
|
|
997
|
-
accessTokenBeforeUnlock !== accessTokenFromDecryptedVault) {
|
|
998
|
-
const latestAccessToken = compareAndGetLatestToken(accessTokenBeforeUnlock, accessTokenFromDecryptedVault);
|
|
999
|
-
// update the access token in the state with the latest access token if it's different from the decrypted access token after unlocking
|
|
1000
|
-
// later when we call `syncLatestGlobalPassword`, the encrypted vault will be updated with the latest access token.
|
|
1001
|
-
this.update((state) => {
|
|
1002
|
-
state.accessToken = latestAccessToken;
|
|
1003
|
-
});
|
|
1004
|
-
}
|
|
1005
|
-
__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_resetPasswordOutdatedCache).call(this);
|
|
1006
940
|
}
|
|
1007
941
|
catch (error) {
|
|
1008
942
|
if (__classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_isAuthTokenError).call(this, error)) {
|
|
@@ -1432,14 +1366,14 @@ async function _SeedlessOnboardingController_updateVault({ password, vaultData,
|
|
|
1432
1366
|
// from the password using an intentionally slow key derivation function.
|
|
1433
1367
|
// We should make sure that we only call it very intentionally.
|
|
1434
1368
|
const { vault, exportedKeyString } = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").encryptWithDetail(password, serializedVaultData);
|
|
1369
|
+
// Encrypt vault key.
|
|
1435
1370
|
const aes = managedNonce(gcm)(pwEncKey);
|
|
1436
1371
|
const encryptedKey = aes.encrypt(utf8ToBytes(exportedKeyString));
|
|
1437
|
-
const encryptedSeedlessEncryptionKey = bytesToBase64(encryptedKey);
|
|
1438
1372
|
this.update((state) => {
|
|
1439
1373
|
state.vault = vault;
|
|
1440
1374
|
state.vaultEncryptionKey = exportedKeyString;
|
|
1441
1375
|
state.vaultEncryptionSalt = JSON.parse(vault).salt;
|
|
1442
|
-
state.encryptedSeedlessEncryptionKey =
|
|
1376
|
+
state.encryptedSeedlessEncryptionKey = bytesToBase64(encryptedKey);
|
|
1443
1377
|
});
|
|
1444
1378
|
});
|
|
1445
1379
|
}, _SeedlessOnboardingController_getAccessTokenAndRevokeToken =
|
|
@@ -1598,7 +1532,18 @@ async function _SeedlessOnboardingController_assertPasswordInSync(options) {
|
|
|
1598
1532
|
*/
|
|
1599
1533
|
async function _SeedlessOnboardingController_executeWithTokenRefresh(operation, operationName) {
|
|
1600
1534
|
try {
|
|
1601
|
-
|
|
1535
|
+
// proactively check for expired tokens and refresh them if needed
|
|
1536
|
+
const isNodeAuthTokenExpired = this.checkNodeAuthTokenExpired();
|
|
1537
|
+
const isMetadataAccessTokenExpired = this.checkMetadataAccessTokenExpired();
|
|
1538
|
+
// access token is only accessible when the vault is unlocked
|
|
1539
|
+
// so skip the check if the vault is locked
|
|
1540
|
+
let isAccessTokenExpired = false;
|
|
1541
|
+
if (__classPrivateFieldGet(this, _SeedlessOnboardingController_isUnlocked, "f")) {
|
|
1542
|
+
isAccessTokenExpired = this.checkAccessTokenExpired();
|
|
1543
|
+
}
|
|
1544
|
+
if (isNodeAuthTokenExpired ||
|
|
1545
|
+
isMetadataAccessTokenExpired ||
|
|
1546
|
+
isAccessTokenExpired) {
|
|
1602
1547
|
log(`JWT token expired during ${operationName}, attempting to refresh tokens`, 'node auth token exp check');
|
|
1603
1548
|
await this.refreshAuthTokens();
|
|
1604
1549
|
}
|
|
@@ -1624,58 +1569,6 @@ async function _SeedlessOnboardingController_executeWithTokenRefresh(operation,
|
|
|
1624
1569
|
throw error;
|
|
1625
1570
|
}
|
|
1626
1571
|
}
|
|
1627
|
-
}, _SeedlessOnboardingController_updateVaultAfterAuthTokenRefresh = async function _SeedlessOnboardingController_updateVaultAfterAuthTokenRefresh(accessToken) {
|
|
1628
|
-
await __classPrivateFieldGet(this, _SeedlessOnboardingController_instances, "m", _SeedlessOnboardingController_withVaultLock).call(this, async () => {
|
|
1629
|
-
if (!__classPrivateFieldGet(this, _SeedlessOnboardingController_isUnlocked, "f")) {
|
|
1630
|
-
// we just temporarily store the access token in the state
|
|
1631
|
-
// when user attempts to unlock the vault, we will use this access token to update the vault
|
|
1632
|
-
this.update((state) => {
|
|
1633
|
-
state.accessToken = accessToken;
|
|
1634
|
-
});
|
|
1635
|
-
return;
|
|
1636
|
-
}
|
|
1637
|
-
const { vaultEncryptionKey, vaultEncryptionSalt } = this.state;
|
|
1638
|
-
if (!vaultEncryptionKey ||
|
|
1639
|
-
!vaultEncryptionSalt ||
|
|
1640
|
-
!__classPrivateFieldGet(this, _SeedlessOnboardingController_cachedDecryptedVaultData, "f")) {
|
|
1641
|
-
throw new Error(SeedlessOnboardingControllerErrorMessage.MissingCredentials);
|
|
1642
|
-
}
|
|
1643
|
-
const serializedVaultData = serializeVaultData({
|
|
1644
|
-
...__classPrivateFieldGet(this, _SeedlessOnboardingController_cachedDecryptedVaultData, "f"),
|
|
1645
|
-
accessToken,
|
|
1646
|
-
});
|
|
1647
|
-
const encryptionKey = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").importKey(vaultEncryptionKey);
|
|
1648
|
-
const updatedEncVault = await __classPrivateFieldGet(this, _SeedlessOnboardingController_vaultEncryptor, "f").encryptWithKey(encryptionKey, serializedVaultData);
|
|
1649
|
-
// NOTE: Referenced from keyring-controller!
|
|
1650
|
-
// We need to include the salt used to derive
|
|
1651
|
-
// the encryption key, to be able to derive it
|
|
1652
|
-
// from password again.
|
|
1653
|
-
updatedEncVault.salt = vaultEncryptionSalt;
|
|
1654
|
-
this.update((state) => {
|
|
1655
|
-
state.vault = JSON.stringify(updatedEncVault);
|
|
1656
|
-
state.vaultEncryptionSalt = vaultEncryptionSalt;
|
|
1657
|
-
state.accessToken = accessToken;
|
|
1658
|
-
state.vaultEncryptionKey = vaultEncryptionKey;
|
|
1659
|
-
});
|
|
1660
|
-
// update the cached decrypted vault data with the new access token
|
|
1661
|
-
__classPrivateFieldSet(this, _SeedlessOnboardingController_cachedDecryptedVaultData, {
|
|
1662
|
-
...__classPrivateFieldGet(this, _SeedlessOnboardingController_cachedDecryptedVaultData, "f"),
|
|
1663
|
-
accessToken,
|
|
1664
|
-
}, "f");
|
|
1665
|
-
});
|
|
1666
|
-
}, _SeedlessOnboardingController_checkTokensExpired = function _SeedlessOnboardingController_checkTokensExpired() {
|
|
1667
|
-
// proactively check for expired tokens and refresh them if needed
|
|
1668
|
-
const isNodeAuthTokenExpired = this.checkNodeAuthTokenExpired();
|
|
1669
|
-
const isMetadataAccessTokenExpired = this.checkMetadataAccessTokenExpired();
|
|
1670
|
-
// access token is only accessible when the vault is unlocked
|
|
1671
|
-
// so skip the check if the vault is locked
|
|
1672
|
-
let isAccessTokenExpired = false;
|
|
1673
|
-
if (__classPrivateFieldGet(this, _SeedlessOnboardingController_isUnlocked, "f")) {
|
|
1674
|
-
isAccessTokenExpired = this.checkAccessTokenExpired();
|
|
1675
|
-
}
|
|
1676
|
-
return (isNodeAuthTokenExpired ||
|
|
1677
|
-
isMetadataAccessTokenExpired ||
|
|
1678
|
-
isAccessTokenExpired);
|
|
1679
1572
|
};
|
|
1680
1573
|
/**
|
|
1681
1574
|
* Assert that the provided password is a valid non-empty string.
|