@metamask/profile-sync-controller 5.0.0 → 6.0.0
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 +20 -1
- package/dist/controllers/authentication/AuthenticationController.cjs.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.d.cts +2 -2
- package/dist/controllers/authentication/AuthenticationController.d.cts.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.d.mts +2 -2
- package/dist/controllers/authentication/AuthenticationController.d.mts.map +1 -1
- package/dist/controllers/authentication/AuthenticationController.mjs.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.cjs +0 -5
- package/dist/controllers/authentication/__fixtures__/mockResponses.cjs.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.d.cts.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.d.mts.map +1 -1
- package/dist/controllers/authentication/__fixtures__/mockResponses.mjs +0 -5
- package/dist/controllers/authentication/__fixtures__/mockResponses.mjs.map +1 -1
- package/dist/controllers/authentication/services.cjs +0 -2
- package/dist/controllers/authentication/services.cjs.map +1 -1
- package/dist/controllers/authentication/services.d.cts +5 -3
- package/dist/controllers/authentication/services.d.cts.map +1 -1
- package/dist/controllers/authentication/services.d.mts +5 -3
- package/dist/controllers/authentication/services.d.mts.map +1 -1
- package/dist/controllers/authentication/services.mjs +0 -2
- package/dist/controllers/authentication/services.mjs.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.cjs +11 -42
- package/dist/controllers/user-storage/UserStorageController.cjs.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.d.cts +8 -15
- package/dist/controllers/user-storage/UserStorageController.d.cts.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.d.mts +8 -15
- package/dist/controllers/user-storage/UserStorageController.d.mts.map +1 -1
- package/dist/controllers/user-storage/UserStorageController.mjs +11 -42
- package/dist/controllers/user-storage/UserStorageController.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs +3 -15
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts +10 -10
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts +10 -10
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs +4 -16
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.cjs +5 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.cts +4 -0
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.mts +4 -0
- package/dist/controllers/user-storage/__fixtures__/mockResponses.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.mjs +5 -1
- package/dist/controllers/user-storage/__fixtures__/mockResponses.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.cjs +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.mjs +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockServices.mjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.cjs +5 -2
- package/dist/controllers/user-storage/__fixtures__/test-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.cts +3 -0
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.mts +3 -0
- package/dist/controllers/user-storage/__fixtures__/test-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/test-utils.mjs +5 -2
- package/dist/controllers/user-storage/__fixtures__/test-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.cjs +2 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.cts +1 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.mts +1 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.mjs +2 -0
- package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.cjs +3 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.cts +5 -5
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.mts +5 -5
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.mjs +3 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.cjs +4 -2
- package/dist/controllers/user-storage/account-syncing/controller-integration.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.cts +3 -0
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.mts +3 -0
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.mjs +4 -2
- package/dist/controllers/user-storage/account-syncing/controller-integration.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.cjs +3 -6
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.cts +1 -0
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.mts +1 -0
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.mjs +3 -6
- package/dist/controllers/user-storage/account-syncing/setup-subscriptions.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.cjs +6 -2
- package/dist/controllers/user-storage/account-syncing/sync-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.cts +5 -0
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.mts +5 -0
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.mjs +6 -2
- package/dist/controllers/user-storage/account-syncing/sync-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.cts +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.mts +1 -1
- package/dist/controllers/user-storage/account-syncing/types.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/types.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.cjs +3 -1
- package/dist/controllers/user-storage/account-syncing/utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.d.cts +2 -0
- package/dist/controllers/user-storage/account-syncing/utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.d.mts +2 -0
- package/dist/controllers/user-storage/account-syncing/utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.mjs +3 -1
- package/dist/controllers/user-storage/account-syncing/utils.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs +1 -0
- package/dist/controllers/user-storage/network-syncing/add-network-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.cjs +3 -3
- package/dist/controllers/user-storage/network-syncing/controller-integration.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts +2 -0
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts +2 -0
- package/dist/controllers/user-storage/network-syncing/controller-integration.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/controller-integration.mjs +3 -3
- package/dist/controllers/user-storage/network-syncing/controller-integration.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.cjs +5 -0
- package/dist/controllers/user-storage/network-syncing/services.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.d.cts +5 -1
- package/dist/controllers/user-storage/network-syncing/services.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.d.mts +5 -1
- package/dist/controllers/user-storage/network-syncing/services.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/services.mjs +5 -0
- package/dist/controllers/user-storage/network-syncing/services.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.cjs +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.mjs +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-all.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/sync-mutations.mjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs +3 -0
- package/dist/controllers/user-storage/network-syncing/update-network-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/services.cjs +0 -1
- package/dist/controllers/user-storage/services.cjs.map +1 -1
- package/dist/controllers/user-storage/services.d.cts.map +1 -1
- package/dist/controllers/user-storage/services.d.mts.map +1 -1
- package/dist/controllers/user-storage/services.mjs +0 -1
- package/dist/controllers/user-storage/services.mjs.map +1 -1
- package/dist/controllers/user-storage/utils.cjs +2 -0
- package/dist/controllers/user-storage/utils.cjs.map +1 -1
- package/dist/controllers/user-storage/utils.d.cts +2 -0
- package/dist/controllers/user-storage/utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/utils.d.mts +2 -0
- package/dist/controllers/user-storage/utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/utils.mjs +2 -0
- package/dist/controllers/user-storage/utils.mjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-auth.cjs +0 -15
- package/dist/sdk/__fixtures__/mock-auth.cjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-auth.mjs +0 -15
- package/dist/sdk/__fixtures__/mock-auth.mjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.cjs +0 -2
- package/dist/sdk/__fixtures__/mock-userstorage.cjs.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.d.cts.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.d.mts.map +1 -1
- package/dist/sdk/__fixtures__/mock-userstorage.mjs +0 -2
- package/dist/sdk/__fixtures__/mock-userstorage.mjs.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.cjs +2 -1
- package/dist/sdk/__fixtures__/test-utils.cjs.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.d.cts +1 -0
- package/dist/sdk/__fixtures__/test-utils.d.cts.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.d.mts +1 -0
- package/dist/sdk/__fixtures__/test-utils.d.mts.map +1 -1
- package/dist/sdk/__fixtures__/test-utils.mjs +2 -1
- package/dist/sdk/__fixtures__/test-utils.mjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.cjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.cjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.d.cts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.d.mts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-siwe.mjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.cjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.cjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.d.cts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.d.mts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs +1 -1
- package/dist/sdk/authentication-jwt-bearer/flow-srp.mjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.cjs +1 -2
- package/dist/sdk/authentication-jwt-bearer/services.cjs.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.cts +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.cts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.mts +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.d.mts.map +1 -1
- package/dist/sdk/authentication-jwt-bearer/services.mjs +1 -2
- package/dist/sdk/authentication-jwt-bearer/services.mjs.map +1 -1
- package/dist/sdk/authentication.cjs +0 -3
- package/dist/sdk/authentication.cjs.map +1 -1
- package/dist/sdk/authentication.d.cts.map +1 -1
- package/dist/sdk/authentication.d.mts.map +1 -1
- package/dist/sdk/authentication.mjs +0 -3
- package/dist/sdk/authentication.mjs.map +1 -1
- package/dist/sdk/user-storage.cjs +1 -3
- package/dist/sdk/user-storage.cjs.map +1 -1
- package/dist/sdk/user-storage.d.cts +1 -1
- package/dist/sdk/user-storage.d.cts.map +1 -1
- package/dist/sdk/user-storage.d.mts +1 -1
- package/dist/sdk/user-storage.d.mts.map +1 -1
- package/dist/sdk/user-storage.mjs +1 -3
- package/dist/sdk/user-storage.mjs.map +1 -1
- package/dist/sdk/utils/eip-6963-metamask-provider.cjs +4 -4
- package/dist/sdk/utils/eip-6963-metamask-provider.cjs.map +1 -1
- package/dist/sdk/utils/eip-6963-metamask-provider.mjs +4 -4
- package/dist/sdk/utils/eip-6963-metamask-provider.mjs.map +1 -1
- package/dist/shared/encryption/constants.cjs +0 -2
- package/dist/shared/encryption/constants.cjs.map +1 -1
- package/dist/shared/encryption/constants.d.cts.map +1 -1
- package/dist/shared/encryption/constants.d.mts.map +1 -1
- package/dist/shared/encryption/constants.mjs +0 -2
- package/dist/shared/encryption/constants.mjs.map +1 -1
- package/dist/shared/encryption/encryption.cjs +1 -0
- package/dist/shared/encryption/encryption.cjs.map +1 -1
- package/dist/shared/encryption/encryption.d.cts +1 -0
- package/dist/shared/encryption/encryption.d.cts.map +1 -1
- package/dist/shared/encryption/encryption.d.mts +1 -0
- package/dist/shared/encryption/encryption.d.mts.map +1 -1
- package/dist/shared/encryption/encryption.mjs +1 -0
- package/dist/shared/encryption/encryption.mjs.map +1 -1
- package/package.json +7 -7
|
@@ -10,16 +10,16 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
10
10
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
11
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
12
|
};
|
|
13
|
-
var _UserStorageController_instances, _UserStorageController_env, _UserStorageController_auth, _UserStorageController_config,
|
|
13
|
+
var _UserStorageController_instances, _UserStorageController_env, _UserStorageController_auth, _UserStorageController_config, _UserStorageController_isUnlocked, _UserStorageController_keyringController, _UserStorageController_nativeScryptCrypto, _UserStorageController_registerMessageHandlers, _UserStorageController_getStorageOptions, _UserStorageController_getStorageKeyAndBearerToken, _UserStorageController_createStorageKey, _UserStorageController__snapSignMessageCache, _UserStorageController_snapSignMessage, _UserStorageController_setIsProfileSyncingUpdateLoading;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.defaultState = void 0;
|
|
16
16
|
const base_controller_1 = require("@metamask/base-controller");
|
|
17
|
-
const encryption_1 = require("../../shared/encryption/index.cjs");
|
|
18
|
-
const auth_snap_requests_1 = require("../authentication/auth-snap-requests.cjs");
|
|
19
17
|
const controller_integration_1 = require("./account-syncing/controller-integration.cjs");
|
|
20
18
|
const setup_subscriptions_1 = require("./account-syncing/setup-subscriptions.cjs");
|
|
21
19
|
const controller_integration_2 = require("./network-syncing/controller-integration.cjs");
|
|
22
20
|
const services_1 = require("./services.cjs");
|
|
21
|
+
const encryption_1 = require("../../shared/encryption/index.cjs");
|
|
22
|
+
const auth_snap_requests_1 = require("../authentication/auth-snap-requests.cjs");
|
|
23
23
|
const controllerName = 'UserStorageController';
|
|
24
24
|
exports.defaultState = {
|
|
25
25
|
isProfileSyncingEnabled: true,
|
|
@@ -63,7 +63,7 @@ const metadata = {
|
|
|
63
63
|
* - No one can access this data unless they are have the SRP and are able to run the signing snap.
|
|
64
64
|
*/
|
|
65
65
|
class UserStorageController extends base_controller_1.BaseController {
|
|
66
|
-
constructor({ messenger, state, env, config,
|
|
66
|
+
constructor({ messenger, state, env, config, nativeScryptCrypto, }) {
|
|
67
67
|
super({
|
|
68
68
|
messenger,
|
|
69
69
|
metadata,
|
|
@@ -85,7 +85,7 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
85
85
|
const sessionProfile = await this.messagingSystem.call('AuthenticationController:getSessionProfile');
|
|
86
86
|
return sessionProfile?.profileId;
|
|
87
87
|
},
|
|
88
|
-
|
|
88
|
+
isSignedIn: () => {
|
|
89
89
|
return this.messagingSystem.call('AuthenticationController:isSignedIn');
|
|
90
90
|
},
|
|
91
91
|
signIn: async () => {
|
|
@@ -96,14 +96,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
96
96
|
},
|
|
97
97
|
});
|
|
98
98
|
_UserStorageController_config.set(this, void 0);
|
|
99
|
-
_UserStorageController_notificationServices.set(this, {
|
|
100
|
-
disableNotificationServices: async () => {
|
|
101
|
-
return await this.messagingSystem.call('NotificationServicesController:disableNotificationServices');
|
|
102
|
-
},
|
|
103
|
-
selectIsNotificationServicesEnabled: async () => {
|
|
104
|
-
return this.messagingSystem.call('NotificationServicesController:selectIsNotificationServicesEnabled');
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
99
|
_UserStorageController_isUnlocked.set(this, false);
|
|
108
100
|
_UserStorageController_keyringController.set(this, {
|
|
109
101
|
setupLockedStateSubscriptions: () => {
|
|
@@ -122,7 +114,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
122
114
|
__classPrivateFieldGet(this, _UserStorageController_env, "f").isAccountSyncingEnabled = Boolean(env?.isAccountSyncingEnabled);
|
|
123
115
|
__classPrivateFieldGet(this, _UserStorageController_env, "f").isNetworkSyncingEnabled = Boolean(env?.isNetworkSyncingEnabled);
|
|
124
116
|
__classPrivateFieldSet(this, _UserStorageController_config, config, "f");
|
|
125
|
-
this.getMetaMetricsState = getMetaMetricsState;
|
|
126
117
|
__classPrivateFieldGet(this, _UserStorageController_keyringController, "f").setupLockedStateSubscriptions();
|
|
127
118
|
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_registerMessageHandlers).call(this);
|
|
128
119
|
__classPrivateFieldSet(this, _UserStorageController_nativeScryptCrypto, nativeScryptCrypto, "f");
|
|
@@ -145,8 +136,8 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
145
136
|
async enableProfileSyncing() {
|
|
146
137
|
try {
|
|
147
138
|
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_setIsProfileSyncingUpdateLoading).call(this, true);
|
|
148
|
-
const
|
|
149
|
-
if (!
|
|
139
|
+
const isSignedIn = __classPrivateFieldGet(this, _UserStorageController_auth, "f").isSignedIn();
|
|
140
|
+
if (!isSignedIn) {
|
|
150
141
|
await __classPrivateFieldGet(this, _UserStorageController_auth, "f").signIn();
|
|
151
142
|
}
|
|
152
143
|
this.update((state) => {
|
|
@@ -160,11 +151,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
160
151
|
throw new Error(`${controllerName} - failed to enable profile syncing - ${errorMessage}`);
|
|
161
152
|
}
|
|
162
153
|
}
|
|
163
|
-
async setIsProfileSyncingEnabled(isProfileSyncingEnabled) {
|
|
164
|
-
this.update((state) => {
|
|
165
|
-
state.isProfileSyncingEnabled = isProfileSyncingEnabled;
|
|
166
|
-
});
|
|
167
|
-
}
|
|
168
154
|
async disableProfileSyncing() {
|
|
169
155
|
const isAlreadyDisabled = !this.state.isProfileSyncingEnabled;
|
|
170
156
|
if (isAlreadyDisabled) {
|
|
@@ -172,14 +158,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
172
158
|
}
|
|
173
159
|
try {
|
|
174
160
|
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_setIsProfileSyncingUpdateLoading).call(this, true);
|
|
175
|
-
const isNotificationServicesEnabled = await __classPrivateFieldGet(this, _UserStorageController_notificationServices, "f").selectIsNotificationServicesEnabled();
|
|
176
|
-
if (isNotificationServicesEnabled) {
|
|
177
|
-
await __classPrivateFieldGet(this, _UserStorageController_notificationServices, "f").disableNotificationServices();
|
|
178
|
-
}
|
|
179
|
-
const isMetaMetricsParticipation = this.getMetaMetricsState();
|
|
180
|
-
if (!isMetaMetricsParticipation) {
|
|
181
|
-
await __classPrivateFieldGet(this, _UserStorageController_auth, "f").signOut();
|
|
182
|
-
}
|
|
183
161
|
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_setIsProfileSyncingUpdateLoading).call(this, false);
|
|
184
162
|
this.update((state) => {
|
|
185
163
|
state.isProfileSyncingEnabled = false;
|
|
@@ -199,7 +177,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
199
177
|
* @returns the decrypted string contents found from user storage (or null if not found)
|
|
200
178
|
*/
|
|
201
179
|
async performGetStorage(path) {
|
|
202
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
203
180
|
const { bearerToken, storageKey } = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_getStorageKeyAndBearerToken).call(this);
|
|
204
181
|
const result = await (0, services_1.getUserStorage)({
|
|
205
182
|
path,
|
|
@@ -217,7 +194,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
217
194
|
* @returns the array of decrypted string contents found from user storage (or null if not found)
|
|
218
195
|
*/
|
|
219
196
|
async performGetStorageAllFeatureEntries(path) {
|
|
220
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
221
197
|
const { bearerToken, storageKey } = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_getStorageKeyAndBearerToken).call(this);
|
|
222
198
|
const result = await (0, services_1.getUserStorageAllFeatureEntries)({
|
|
223
199
|
path,
|
|
@@ -236,7 +212,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
236
212
|
* @returns nothing. NOTE that an error is thrown if fails to store data.
|
|
237
213
|
*/
|
|
238
214
|
async performSetStorage(path, value) {
|
|
239
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
240
215
|
const { bearerToken, storageKey } = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_getStorageKeyAndBearerToken).call(this);
|
|
241
216
|
await (0, services_1.upsertUserStorage)(value, {
|
|
242
217
|
path,
|
|
@@ -254,7 +229,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
254
229
|
* @returns nothing. NOTE that an error is thrown if fails to store data.
|
|
255
230
|
*/
|
|
256
231
|
async performBatchSetStorage(path, values) {
|
|
257
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
258
232
|
const { bearerToken, storageKey } = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_getStorageKeyAndBearerToken).call(this);
|
|
259
233
|
await (0, services_1.batchUpsertUserStorage)(values, {
|
|
260
234
|
path,
|
|
@@ -270,7 +244,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
270
244
|
* @returns nothing. NOTE that an error is thrown if fails to delete data.
|
|
271
245
|
*/
|
|
272
246
|
async performDeleteStorage(path) {
|
|
273
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
274
247
|
const { bearerToken, storageKey } = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_getStorageKeyAndBearerToken).call(this);
|
|
275
248
|
await (0, services_1.deleteUserStorage)({
|
|
276
249
|
path,
|
|
@@ -286,7 +259,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
286
259
|
* @returns nothing. NOTE that an error is thrown if fails to delete data.
|
|
287
260
|
*/
|
|
288
261
|
async performDeleteStorageAllFeatureEntries(path) {
|
|
289
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
290
262
|
const { bearerToken, storageKey } = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_getStorageKeyAndBearerToken).call(this);
|
|
291
263
|
await (0, services_1.deleteUserStorageAllFeatureEntries)({
|
|
292
264
|
path,
|
|
@@ -303,7 +275,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
303
275
|
* @returns nothing. NOTE that an error is thrown if fails to store data.
|
|
304
276
|
*/
|
|
305
277
|
async performBatchDeleteStorage(path, values) {
|
|
306
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
307
278
|
const { bearerToken, storageKey } = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_getStorageKeyAndBearerToken).call(this);
|
|
308
279
|
await (0, services_1.batchDeleteUserStorage)(values, {
|
|
309
280
|
path,
|
|
@@ -318,7 +289,6 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
318
289
|
* @returns the storage key
|
|
319
290
|
*/
|
|
320
291
|
async getStorageKey() {
|
|
321
|
-
__classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_assertProfileSyncingEnabled).call(this);
|
|
322
292
|
const storageKey = await __classPrivateFieldGet(this, _UserStorageController_instances, "m", _UserStorageController_createStorageKey).call(this);
|
|
323
293
|
return storageKey;
|
|
324
294
|
}
|
|
@@ -359,6 +329,7 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
359
329
|
}
|
|
360
330
|
/**
|
|
361
331
|
* Saves an individual internal account to the user storage.
|
|
332
|
+
*
|
|
362
333
|
* @param internalAccount - The internal account to save
|
|
363
334
|
*/
|
|
364
335
|
async saveInternalAccountToUserStorage(internalAccount) {
|
|
@@ -385,7 +356,7 @@ class UserStorageController extends base_controller_1.BaseController {
|
|
|
385
356
|
});
|
|
386
357
|
}
|
|
387
358
|
}
|
|
388
|
-
_UserStorageController_env = new WeakMap(), _UserStorageController_auth = new WeakMap(), _UserStorageController_config = new WeakMap(),
|
|
359
|
+
_UserStorageController_env = new WeakMap(), _UserStorageController_auth = new WeakMap(), _UserStorageController_config = new WeakMap(), _UserStorageController_isUnlocked = new WeakMap(), _UserStorageController_keyringController = new WeakMap(), _UserStorageController_nativeScryptCrypto = new WeakMap(), _UserStorageController__snapSignMessageCache = new WeakMap(), _UserStorageController_instances = new WeakSet(), _UserStorageController_registerMessageHandlers = function _UserStorageController_registerMessageHandlers() {
|
|
389
360
|
this.messagingSystem.registerActionHandler('UserStorageController:performGetStorage', this.performGetStorage.bind(this));
|
|
390
361
|
this.messagingSystem.registerActionHandler('UserStorageController:performGetStorageAllFeatureEntries', this.performGetStorageAllFeatureEntries.bind(this));
|
|
391
362
|
this.messagingSystem.registerActionHandler('UserStorageController:performSetStorage', this.performSetStorage.bind(this));
|
|
@@ -404,13 +375,11 @@ _UserStorageController_env = new WeakMap(), _UserStorageController_auth = new We
|
|
|
404
375
|
bearerToken,
|
|
405
376
|
nativeScryptCrypto: __classPrivateFieldGet(this, _UserStorageController_nativeScryptCrypto, "f"),
|
|
406
377
|
};
|
|
407
|
-
}, _UserStorageController_assertProfileSyncingEnabled = function _UserStorageController_assertProfileSyncingEnabled() {
|
|
408
|
-
if (!this.state.isProfileSyncingEnabled) {
|
|
409
|
-
throw new Error(`${controllerName}: Unable to call method, user is not authenticated`);
|
|
410
|
-
}
|
|
411
378
|
}, _UserStorageController_getStorageKeyAndBearerToken =
|
|
412
379
|
/**
|
|
413
380
|
* Utility to get the bearer token and storage key
|
|
381
|
+
*
|
|
382
|
+
* @returns the bearer token and storage key
|
|
414
383
|
*/
|
|
415
384
|
async function _UserStorageController_getStorageKeyAndBearerToken() {
|
|
416
385
|
const bearerToken = await __classPrivateFieldGet(this, _UserStorageController_auth, "f").getBearerToken();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserStorageController.cjs","sourceRoot":"","sources":["../../../src/controllers/user-storage/UserStorageController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AccountsControllerListAccountsAction,\n AccountsControllerUpdateAccountMetadataAction,\n AccountsControllerAccountRenamedEvent,\n AccountsControllerAccountAddedEvent,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n StateMetadata,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport {\n type KeyringControllerGetStateAction,\n type KeyringControllerLockEvent,\n type KeyringControllerUnlockEvent,\n type KeyringControllerAddNewAccountAction,\n} from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n NetworkControllerAddNetworkAction,\n NetworkControllerGetStateAction,\n NetworkControllerNetworkRemovedEvent,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerUpdateNetworkAction,\n} from '@metamask/network-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\n\nimport { createSHA256Hash } from '../../shared/encryption';\nimport type { UserStorageFeatureKeys } from '../../shared/storage-schema';\nimport {\n type UserStoragePathWithFeatureAndKey,\n type UserStoragePathWithFeatureOnly,\n} from '../../shared/storage-schema';\nimport type { NativeScrypt } from '../../shared/types/encryption';\nimport { createSnapSignMessageRequest } from '../authentication/auth-snap-requests';\nimport type {\n AuthenticationControllerGetBearerToken,\n AuthenticationControllerGetSessionProfile,\n AuthenticationControllerIsSignedIn,\n AuthenticationControllerPerformSignIn,\n AuthenticationControllerPerformSignOut,\n} from '../authentication/AuthenticationController';\nimport {\n saveInternalAccountToUserStorage,\n syncInternalAccountsWithUserStorage,\n} from './account-syncing/controller-integration';\nimport { setupAccountSyncingSubscriptions } from './account-syncing/setup-subscriptions';\nimport {\n performMainNetworkSync,\n startNetworkSyncing,\n} from './network-syncing/controller-integration';\nimport {\n batchDeleteUserStorage,\n batchUpsertUserStorage,\n deleteUserStorage,\n deleteUserStorageAllFeatureEntries,\n getUserStorage,\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from './services';\n\n// TODO: fix external dependencies\nexport declare type NotificationServicesControllerDisableNotificationServices =\n {\n type: `NotificationServicesController:disableNotificationServices`;\n handler: () => Promise<void>;\n };\n\nexport declare type NotificationServicesControllerSelectIsNotificationServicesEnabled =\n {\n type: `NotificationServicesController:selectIsNotificationServicesEnabled`;\n handler: () => boolean;\n };\n\nconst controllerName = 'UserStorageController';\n\n// State\nexport type UserStorageControllerState = {\n /**\n * Condition used by UI and to determine if we can use some of the User Storage methods.\n */\n isProfileSyncingEnabled: boolean | null;\n /**\n * Loading state for the profile syncing update\n */\n isProfileSyncingUpdateLoading: boolean;\n /**\n * Condition used by E2E tests to determine if account syncing has been dispatched at least once.\n */\n hasAccountSyncingSyncedAtLeastOnce: boolean;\n /**\n * Condition used by UI to determine if account syncing is ready to be dispatched.\n */\n isAccountSyncingReadyToBeDispatched: boolean;\n /**\n * Condition used by UI to determine if account syncing is in progress.\n */\n isAccountSyncingInProgress: boolean;\n /**\n * Condition used to ensure that we do not perform any network sync mutations until we have synced at least once\n */\n hasNetworkSyncingSyncedAtLeastOnce?: boolean;\n};\n\nexport const defaultState: UserStorageControllerState = {\n isProfileSyncingEnabled: true,\n isProfileSyncingUpdateLoading: false,\n hasAccountSyncingSyncedAtLeastOnce: false,\n isAccountSyncingReadyToBeDispatched: false,\n isAccountSyncingInProgress: false,\n};\n\nconst metadata: StateMetadata<UserStorageControllerState> = {\n isProfileSyncingEnabled: {\n persist: true,\n anonymous: true,\n },\n isProfileSyncingUpdateLoading: {\n persist: false,\n anonymous: false,\n },\n hasAccountSyncingSyncedAtLeastOnce: {\n persist: true,\n anonymous: false,\n },\n isAccountSyncingReadyToBeDispatched: {\n persist: true,\n anonymous: false,\n },\n isAccountSyncingInProgress: {\n persist: false,\n anonymous: false,\n },\n hasNetworkSyncingSyncedAtLeastOnce: {\n persist: true,\n anonymous: false,\n },\n};\n\ntype ControllerConfig = {\n accountSyncing?: {\n maxNumberOfAccountsToAdd?: number;\n /**\n * Callback that fires when account sync adds an account.\n * This is used for analytics.\n */\n onAccountAdded?: (profileId: string) => void;\n\n /**\n * Callback that fires when account sync updates the name of an account.\n * This is used for analytics.\n */\n onAccountNameUpdated?: (profileId: string) => void;\n\n /**\n * Callback that fires when an erroneous situation happens during account sync.\n * This is used for analytics.\n */\n onAccountSyncErroneousSituation?: (\n profileId: string,\n situationMessage: string,\n sentryContext?: Record<string, unknown>,\n ) => void;\n };\n\n networkSyncing?: {\n maxNumberOfNetworksToAdd?: number;\n /**\n * Callback that fires when network sync adds a network\n * This is used for analytics.\n * @param profileId - ID for a given User (shared cross devices once authenticated)\n * @param chainId - Chain ID for the network added (in hex)\n */\n onNetworkAdded?: (profileId: string, chainId: string) => void;\n /**\n * Callback that fires when network sync updates a network\n * This is used for analytics.\n * @param profileId - ID for a given User (shared cross devices once authenticated)\n * @param chainId - Chain ID for the network added (in hex)\n */\n onNetworkUpdated?: (profileId: string, chainId: string) => void;\n /**\n * Callback that fires when network sync deletes a network\n * This is used for analytics.\n * @param profileId - ID for a given User (shared cross devices once authenticated)\n * @param chainId - Chain ID for the network added (in hex)\n */\n onNetworkRemoved?: (profileId: string, chainId: string) => void;\n };\n};\n\n// Messenger Actions\ntype CreateActionsObj<Controller extends keyof UserStorageController> = {\n [K in Controller]: {\n type: `${typeof controllerName}:${K}`;\n handler: UserStorageController[K];\n };\n};\ntype ActionsObj = CreateActionsObj<\n | 'performGetStorage'\n | 'performGetStorageAllFeatureEntries'\n | 'performSetStorage'\n | 'getStorageKey'\n | 'enableProfileSyncing'\n | 'disableProfileSyncing'\n | 'syncInternalAccountsWithUserStorage'\n | 'saveInternalAccountToUserStorage'\n>;\nexport type UserStorageControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n UserStorageControllerState\n>;\nexport type Actions =\n | ActionsObj[keyof ActionsObj]\n | UserStorageControllerGetStateAction;\nexport type UserStorageControllerPerformGetStorage =\n ActionsObj['performGetStorage'];\nexport type UserStorageControllerPerformGetStorageAllFeatureEntries =\n ActionsObj['performGetStorageAllFeatureEntries'];\nexport type UserStorageControllerPerformSetStorage =\n ActionsObj['performSetStorage'];\nexport type UserStorageControllerGetStorageKey = ActionsObj['getStorageKey'];\nexport type UserStorageControllerEnableProfileSyncing =\n ActionsObj['enableProfileSyncing'];\nexport type UserStorageControllerDisableProfileSyncing =\n ActionsObj['disableProfileSyncing'];\nexport type UserStorageControllerSyncInternalAccountsWithUserStorage =\n ActionsObj['syncInternalAccountsWithUserStorage'];\nexport type UserStorageControllerSaveInternalAccountToUserStorage =\n ActionsObj['saveInternalAccountToUserStorage'];\n\nexport type AllowedActions =\n // Keyring Requests\n | KeyringControllerGetStateAction\n // Snap Requests\n | HandleSnapRequest\n // Auth Requests\n | AuthenticationControllerGetBearerToken\n | AuthenticationControllerGetSessionProfile\n | AuthenticationControllerPerformSignIn\n | AuthenticationControllerIsSignedIn\n | AuthenticationControllerPerformSignOut\n // Metamask Notifications\n | NotificationServicesControllerDisableNotificationServices\n | NotificationServicesControllerSelectIsNotificationServicesEnabled\n // Account Syncing\n | AccountsControllerListAccountsAction\n | AccountsControllerUpdateAccountMetadataAction\n | KeyringControllerAddNewAccountAction\n // Network Syncing\n | NetworkControllerGetStateAction\n | NetworkControllerAddNetworkAction\n | NetworkControllerRemoveNetworkAction\n | NetworkControllerUpdateNetworkAction;\n\n// Messenger events\nexport type UserStorageControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n UserStorageControllerState\n>;\nexport type UserStorageControllerAccountSyncingInProgress = {\n type: `${typeof controllerName}:accountSyncingInProgress`;\n payload: [boolean];\n};\nexport type UserStorageControllerAccountSyncingComplete = {\n type: `${typeof controllerName}:accountSyncingComplete`;\n payload: [boolean];\n};\nexport type Events =\n | UserStorageControllerStateChangeEvent\n | UserStorageControllerAccountSyncingInProgress\n | UserStorageControllerAccountSyncingComplete;\n\nexport type AllowedEvents =\n | UserStorageControllerStateChangeEvent\n | UserStorageControllerAccountSyncingInProgress\n | UserStorageControllerAccountSyncingComplete\n | KeyringControllerLockEvent\n | KeyringControllerUnlockEvent\n // Account Syncing Events\n | AccountsControllerAccountAddedEvent\n | AccountsControllerAccountRenamedEvent\n // Network Syncing Events\n | NetworkControllerNetworkRemovedEvent;\n\n// Messenger\nexport type UserStorageControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n Actions | AllowedActions,\n Events | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Reusable controller that allows any team to store synchronized data for a given user.\n * These can be settings shared cross MetaMask clients, or data we want to persist when uninstalling/reinstalling.\n *\n * NOTE:\n * - data stored on UserStorage is FULLY encrypted, with the only keys stored/managed on the client.\n * - No one can access this data unless they are have the SRP and are able to run the signing snap.\n */\nexport default class UserStorageController extends BaseController<\n typeof controllerName,\n UserStorageControllerState,\n UserStorageControllerMessenger\n> {\n // This is replaced with the actual value in the constructor\n // We will remove this once the feature will be released\n #env = {\n isAccountSyncingEnabled: false,\n isNetworkSyncingEnabled: false,\n };\n\n #auth = {\n getBearerToken: async () => {\n return await this.messagingSystem.call(\n 'AuthenticationController:getBearerToken',\n );\n },\n getProfileId: async () => {\n const sessionProfile = await this.messagingSystem.call(\n 'AuthenticationController:getSessionProfile',\n );\n return sessionProfile?.profileId;\n },\n isAuthEnabled: () => {\n return this.messagingSystem.call('AuthenticationController:isSignedIn');\n },\n signIn: async () => {\n return await this.messagingSystem.call(\n 'AuthenticationController:performSignIn',\n );\n },\n signOut: async () => {\n return this.messagingSystem.call(\n 'AuthenticationController:performSignOut',\n );\n },\n };\n\n #config?: ControllerConfig;\n\n #notificationServices = {\n disableNotificationServices: async () => {\n return await this.messagingSystem.call(\n 'NotificationServicesController:disableNotificationServices',\n );\n },\n selectIsNotificationServicesEnabled: async () => {\n return this.messagingSystem.call(\n 'NotificationServicesController:selectIsNotificationServicesEnabled',\n );\n },\n };\n\n #isUnlocked = false;\n\n #keyringController = {\n setupLockedStateSubscriptions: () => {\n const { isUnlocked } = this.messagingSystem.call(\n 'KeyringController:getState',\n );\n this.#isUnlocked = isUnlocked;\n\n this.messagingSystem.subscribe('KeyringController:unlock', () => {\n this.#isUnlocked = true;\n });\n\n this.messagingSystem.subscribe('KeyringController:lock', () => {\n this.#isUnlocked = false;\n });\n },\n };\n\n #nativeScryptCrypto: NativeScrypt | undefined = undefined;\n\n getMetaMetricsState: () => boolean;\n\n constructor({\n messenger,\n state,\n env,\n config,\n getMetaMetricsState,\n nativeScryptCrypto,\n }: {\n messenger: UserStorageControllerMessenger;\n state?: UserStorageControllerState;\n config?: ControllerConfig;\n env?: {\n isAccountSyncingEnabled?: boolean;\n isNetworkSyncingEnabled?: boolean;\n };\n getMetaMetricsState: () => boolean;\n nativeScryptCrypto?: NativeScrypt;\n }) {\n super({\n messenger,\n metadata,\n name: controllerName,\n state: { ...defaultState, ...state },\n });\n\n this.#env.isAccountSyncingEnabled = Boolean(env?.isAccountSyncingEnabled);\n this.#env.isNetworkSyncingEnabled = Boolean(env?.isNetworkSyncingEnabled);\n this.#config = config;\n\n this.getMetaMetricsState = getMetaMetricsState;\n this.#keyringController.setupLockedStateSubscriptions();\n this.#registerMessageHandlers();\n this.#nativeScryptCrypto = nativeScryptCrypto;\n\n // Account Syncing\n if (this.#env.isAccountSyncingEnabled) {\n setupAccountSyncingSubscriptions(\n { isAccountSyncingEnabled: true },\n {\n getUserStorageControllerInstance: () => this,\n getMessenger: () => this.messagingSystem,\n },\n );\n }\n\n // Network Syncing\n if (this.#env.isNetworkSyncingEnabled) {\n startNetworkSyncing({\n messenger,\n getStorageConfig: () => this.#getStorageOptions(),\n isMutationSyncBlocked: () =>\n !this.state.hasNetworkSyncingSyncedAtLeastOnce,\n });\n }\n }\n\n /**\n * Constructor helper for registering this controller's messaging system\n * actions.\n */\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:performGetStorage',\n this.performGetStorage.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:performGetStorageAllFeatureEntries',\n this.performGetStorageAllFeatureEntries.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:performSetStorage',\n this.performSetStorage.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:getStorageKey',\n this.getStorageKey.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:enableProfileSyncing',\n this.enableProfileSyncing.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:disableProfileSyncing',\n this.disableProfileSyncing.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:syncInternalAccountsWithUserStorage',\n this.syncInternalAccountsWithUserStorage.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:saveInternalAccountToUserStorage',\n this.saveInternalAccountToUserStorage.bind(this),\n );\n }\n\n async #getStorageOptions() {\n if (!this.state.isProfileSyncingEnabled) {\n return null;\n }\n\n const { storageKey, bearerToken } =\n await this.#getStorageKeyAndBearerToken();\n return {\n storageKey,\n bearerToken,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n };\n }\n\n public async enableProfileSyncing(): Promise<void> {\n try {\n this.#setIsProfileSyncingUpdateLoading(true);\n\n const authEnabled = this.#auth.isAuthEnabled();\n if (!authEnabled) {\n await this.#auth.signIn();\n }\n\n this.update((state) => {\n state.isProfileSyncingEnabled = true;\n });\n\n this.#setIsProfileSyncingUpdateLoading(false);\n } catch (e) {\n this.#setIsProfileSyncingUpdateLoading(false);\n const errorMessage = e instanceof Error ? e.message : JSON.stringify(e);\n throw new Error(\n `${controllerName} - failed to enable profile syncing - ${errorMessage}`,\n );\n }\n }\n\n public async setIsProfileSyncingEnabled(\n isProfileSyncingEnabled: boolean,\n ): Promise<void> {\n this.update((state) => {\n state.isProfileSyncingEnabled = isProfileSyncingEnabled;\n });\n }\n\n public async disableProfileSyncing(): Promise<void> {\n const isAlreadyDisabled = !this.state.isProfileSyncingEnabled;\n if (isAlreadyDisabled) {\n return;\n }\n\n try {\n this.#setIsProfileSyncingUpdateLoading(true);\n\n const isNotificationServicesEnabled =\n await this.#notificationServices.selectIsNotificationServicesEnabled();\n\n if (isNotificationServicesEnabled) {\n await this.#notificationServices.disableNotificationServices();\n }\n\n const isMetaMetricsParticipation = this.getMetaMetricsState();\n\n if (!isMetaMetricsParticipation) {\n await this.#auth.signOut();\n }\n\n this.#setIsProfileSyncingUpdateLoading(false);\n\n this.update((state) => {\n state.isProfileSyncingEnabled = false;\n });\n } catch (e) {\n this.#setIsProfileSyncingUpdateLoading(false);\n const errorMessage = e instanceof Error ? e.message : JSON.stringify(e);\n throw new Error(\n `${controllerName} - failed to disable profile syncing - ${errorMessage}`,\n );\n }\n }\n\n /**\n * Allows retrieval of stored data. Data stored is string formatted.\n * Developers can extend the entry path and entry name through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}.${key}` that matches schema\n * @returns the decrypted string contents found from user storage (or null if not found)\n */\n public async performGetStorage(\n path: UserStoragePathWithFeatureAndKey,\n ): Promise<string | null> {\n this.#assertProfileSyncingEnabled();\n\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n const result = await getUserStorage({\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n\n return result;\n }\n\n /**\n * Allows retrieval of all stored data for a specific feature. Data stored is formatted as an array of strings.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @returns the array of decrypted string contents found from user storage (or null if not found)\n */\n public async performGetStorageAllFeatureEntries(\n path: UserStoragePathWithFeatureOnly,\n ): Promise<string[] | null> {\n this.#assertProfileSyncingEnabled();\n\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n const result = await getUserStorageAllFeatureEntries({\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n\n return result;\n }\n\n /**\n * Allows storage of user data. Data stored must be string formatted.\n * Developers can extend the entry path and entry name through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}.${key}` that matches schema\n * @param value - The string data you want to store.\n * @returns nothing. NOTE that an error is thrown if fails to store data.\n */\n public async performSetStorage(\n path: UserStoragePathWithFeatureAndKey,\n value: string,\n ): Promise<void> {\n this.#assertProfileSyncingEnabled();\n\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await upsertUserStorage(value, {\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n }\n\n /**\n * Allows storage of multiple user data entries for one specific feature. Data stored must be string formatted.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @param values - data to store, in the form of an array of `[entryKey, entryValue]` pairs\n * @returns nothing. NOTE that an error is thrown if fails to store data.\n */\n public async performBatchSetStorage<\n FeatureName extends UserStoragePathWithFeatureOnly,\n >(\n path: FeatureName,\n values: [UserStorageFeatureKeys<FeatureName>, string][],\n ): Promise<void> {\n this.#assertProfileSyncingEnabled();\n\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await batchUpsertUserStorage(values, {\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n }\n\n /**\n * Allows deletion of user data. Developers can extend the entry path and entry name through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}.${key}` that matches schema\n * @returns nothing. NOTE that an error is thrown if fails to delete data.\n */\n public async performDeleteStorage(\n path: UserStoragePathWithFeatureAndKey,\n ): Promise<void> {\n this.#assertProfileSyncingEnabled();\n\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await deleteUserStorage({\n path,\n bearerToken,\n storageKey,\n });\n }\n\n /**\n * Allows deletion of all user data entries for a specific feature.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @returns nothing. NOTE that an error is thrown if fails to delete data.\n */\n public async performDeleteStorageAllFeatureEntries(\n path: UserStoragePathWithFeatureOnly,\n ): Promise<void> {\n this.#assertProfileSyncingEnabled();\n\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await deleteUserStorageAllFeatureEntries({\n path,\n bearerToken,\n storageKey,\n });\n }\n\n /**\n * Allows delete of multiple user data entries for one specific feature. Data deleted must be string formatted.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @param values - data to store, in the form of an array of entryKey[]\n * @returns nothing. NOTE that an error is thrown if fails to store data.\n */\n public async performBatchDeleteStorage<\n FeatureName extends UserStoragePathWithFeatureOnly,\n >(\n path: FeatureName,\n values: UserStorageFeatureKeys<FeatureName>[],\n ): Promise<void> {\n this.#assertProfileSyncingEnabled();\n\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await batchDeleteUserStorage(values, {\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n }\n\n /**\n * Retrieves the storage key, for internal use only!\n *\n * @returns the storage key\n */\n public async getStorageKey(): Promise<string> {\n this.#assertProfileSyncingEnabled();\n const storageKey = await this.#createStorageKey();\n return storageKey;\n }\n\n #assertProfileSyncingEnabled(): void {\n if (!this.state.isProfileSyncingEnabled) {\n throw new Error(\n `${controllerName}: Unable to call method, user is not authenticated`,\n );\n }\n }\n\n /**\n * Utility to get the bearer token and storage key\n */\n async #getStorageKeyAndBearerToken(): Promise<{\n bearerToken: string;\n storageKey: string;\n }> {\n const bearerToken = await this.#auth.getBearerToken();\n if (!bearerToken) {\n throw new Error('UserStorageController - unable to get bearer token');\n }\n const storageKey = await this.#createStorageKey();\n\n return { bearerToken, storageKey };\n }\n\n /**\n * Rather than storing the storage key, we can compute the storage key when needed.\n *\n * @returns the storage key\n */\n async #createStorageKey(): Promise<string> {\n const id: string = await this.#auth.getProfileId();\n if (!id) {\n throw new Error('UserStorageController - unable to create storage key');\n }\n\n const storageKeySignature = await this.#snapSignMessage(`metamask:${id}`);\n const storageKey = createSHA256Hash(storageKeySignature);\n return storageKey;\n }\n\n #_snapSignMessageCache: Record<`metamask:${string}`, string> = {};\n\n /**\n * Signs a specific message using an underlying auth snap.\n *\n * @param message - A specific tagged message to sign.\n * @returns A Signature created by the snap.\n */\n async #snapSignMessage(message: `metamask:${string}`): Promise<string> {\n if (this.#_snapSignMessageCache[message]) {\n return this.#_snapSignMessageCache[message];\n }\n\n if (!this.#isUnlocked) {\n throw new Error(\n '#snapSignMessage - unable to call snap, wallet is locked',\n );\n }\n\n const result = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n createSnapSignMessageRequest(message),\n )) as string;\n\n this.#_snapSignMessageCache[message] = result;\n\n return result;\n }\n\n #setIsProfileSyncingUpdateLoading(\n isProfileSyncingUpdateLoading: boolean,\n ): void {\n this.update((state) => {\n state.isProfileSyncingUpdateLoading = isProfileSyncingUpdateLoading;\n });\n }\n\n async setHasAccountSyncingSyncedAtLeastOnce(\n hasAccountSyncingSyncedAtLeastOnce: boolean,\n ): Promise<void> {\n this.update((state) => {\n state.hasAccountSyncingSyncedAtLeastOnce =\n hasAccountSyncingSyncedAtLeastOnce;\n });\n }\n\n async setIsAccountSyncingReadyToBeDispatched(\n isAccountSyncingReadyToBeDispatched: boolean,\n ): Promise<void> {\n this.update((state) => {\n state.isAccountSyncingReadyToBeDispatched =\n isAccountSyncingReadyToBeDispatched;\n });\n }\n\n async setIsAccountSyncingInProgress(\n isAccountSyncingInProgress: boolean,\n ): Promise<void> {\n this.update((state) => {\n state.isAccountSyncingInProgress = isAccountSyncingInProgress;\n });\n }\n\n /**\n * Syncs the internal accounts list with the user storage accounts list.\n * This method is used to make sure that the internal accounts list is up-to-date with the user storage accounts list and vice-versa.\n * It will add new accounts to the internal accounts list, update/merge conflicting names and re-upload the results in some cases to the user storage.\n */\n async syncInternalAccountsWithUserStorage(): Promise<void> {\n const profileId = await this.#auth.getProfileId();\n\n await syncInternalAccountsWithUserStorage(\n {\n isAccountSyncingEnabled: this.#env.isAccountSyncingEnabled,\n maxNumberOfAccountsToAdd:\n this.#config?.accountSyncing?.maxNumberOfAccountsToAdd,\n onAccountAdded: () =>\n this.#config?.accountSyncing?.onAccountAdded?.(profileId),\n onAccountNameUpdated: () =>\n this.#config?.accountSyncing?.onAccountNameUpdated?.(profileId),\n onAccountSyncErroneousSituation: (situationMessage, sentryContext) =>\n this.#config?.accountSyncing?.onAccountSyncErroneousSituation?.(\n profileId,\n situationMessage,\n sentryContext,\n ),\n },\n {\n getMessenger: () => this.messagingSystem,\n getUserStorageControllerInstance: () => this,\n },\n );\n }\n\n /**\n * Saves an individual internal account to the user storage.\n * @param internalAccount - The internal account to save\n */\n async saveInternalAccountToUserStorage(\n internalAccount: InternalAccount,\n ): Promise<void> {\n await saveInternalAccountToUserStorage(\n internalAccount,\n { isAccountSyncingEnabled: this.#env.isAccountSyncingEnabled },\n {\n getMessenger: () => this.messagingSystem,\n getUserStorageControllerInstance: () => this,\n },\n );\n }\n\n async syncNetworks() {\n if (!this.#env.isNetworkSyncingEnabled) {\n return;\n }\n\n const profileId = await this.#auth.getProfileId();\n\n await performMainNetworkSync({\n messenger: this.messagingSystem,\n getStorageConfig: () => this.#getStorageOptions(),\n maxNetworksToAdd: this.#config?.networkSyncing?.maxNumberOfNetworksToAdd,\n onNetworkAdded: (cId) =>\n this.#config?.networkSyncing?.onNetworkAdded?.(profileId, cId),\n onNetworkUpdated: (cId) =>\n this.#config?.networkSyncing?.onNetworkUpdated?.(profileId, cId),\n onNetworkRemoved: (cId) =>\n this.#config?.networkSyncing?.onNetworkRemoved?.(profileId, cId),\n });\n\n this.update((s) => {\n s.hasNetworkSyncingSyncedAtLeastOnce = true;\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"UserStorageController.cjs","sourceRoot":"","sources":["../../../src/controllers/user-storage/UserStorageController.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AccountsControllerListAccountsAction,\n AccountsControllerUpdateAccountMetadataAction,\n AccountsControllerAccountRenamedEvent,\n AccountsControllerAccountAddedEvent,\n} from '@metamask/accounts-controller';\nimport type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedMessenger,\n StateMetadata,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport {\n type KeyringControllerGetStateAction,\n type KeyringControllerLockEvent,\n type KeyringControllerUnlockEvent,\n type KeyringControllerAddNewAccountAction,\n} from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n NetworkControllerAddNetworkAction,\n NetworkControllerGetStateAction,\n NetworkControllerNetworkRemovedEvent,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerUpdateNetworkAction,\n} from '@metamask/network-controller';\nimport type { HandleSnapRequest } from '@metamask/snaps-controllers';\n\nimport {\n saveInternalAccountToUserStorage,\n syncInternalAccountsWithUserStorage,\n} from './account-syncing/controller-integration';\nimport { setupAccountSyncingSubscriptions } from './account-syncing/setup-subscriptions';\nimport {\n performMainNetworkSync,\n startNetworkSyncing,\n} from './network-syncing/controller-integration';\nimport {\n batchDeleteUserStorage,\n batchUpsertUserStorage,\n deleteUserStorage,\n deleteUserStorageAllFeatureEntries,\n getUserStorage,\n getUserStorageAllFeatureEntries,\n upsertUserStorage,\n} from './services';\nimport { createSHA256Hash } from '../../shared/encryption';\nimport type { UserStorageFeatureKeys } from '../../shared/storage-schema';\nimport {\n type UserStoragePathWithFeatureAndKey,\n type UserStoragePathWithFeatureOnly,\n} from '../../shared/storage-schema';\nimport type { NativeScrypt } from '../../shared/types/encryption';\nimport { createSnapSignMessageRequest } from '../authentication/auth-snap-requests';\nimport type {\n AuthenticationControllerGetBearerToken,\n AuthenticationControllerGetSessionProfile,\n AuthenticationControllerIsSignedIn,\n AuthenticationControllerPerformSignIn,\n AuthenticationControllerPerformSignOut,\n} from '../authentication/AuthenticationController';\n\nconst controllerName = 'UserStorageController';\n\n// State\nexport type UserStorageControllerState = {\n /**\n * Condition used by UI and to determine if we can use some of the User Storage methods.\n */\n isProfileSyncingEnabled: boolean | null;\n /**\n * Loading state for the profile syncing update\n */\n isProfileSyncingUpdateLoading: boolean;\n /**\n * Condition used by E2E tests to determine if account syncing has been dispatched at least once.\n */\n hasAccountSyncingSyncedAtLeastOnce: boolean;\n /**\n * Condition used by UI to determine if account syncing is ready to be dispatched.\n */\n isAccountSyncingReadyToBeDispatched: boolean;\n /**\n * Condition used by UI to determine if account syncing is in progress.\n */\n isAccountSyncingInProgress: boolean;\n /**\n * Condition used to ensure that we do not perform any network sync mutations until we have synced at least once\n */\n hasNetworkSyncingSyncedAtLeastOnce?: boolean;\n};\n\nexport const defaultState: UserStorageControllerState = {\n isProfileSyncingEnabled: true,\n isProfileSyncingUpdateLoading: false,\n hasAccountSyncingSyncedAtLeastOnce: false,\n isAccountSyncingReadyToBeDispatched: false,\n isAccountSyncingInProgress: false,\n};\n\nconst metadata: StateMetadata<UserStorageControllerState> = {\n isProfileSyncingEnabled: {\n persist: true,\n anonymous: true,\n },\n isProfileSyncingUpdateLoading: {\n persist: false,\n anonymous: false,\n },\n hasAccountSyncingSyncedAtLeastOnce: {\n persist: true,\n anonymous: false,\n },\n isAccountSyncingReadyToBeDispatched: {\n persist: true,\n anonymous: false,\n },\n isAccountSyncingInProgress: {\n persist: false,\n anonymous: false,\n },\n hasNetworkSyncingSyncedAtLeastOnce: {\n persist: true,\n anonymous: false,\n },\n};\n\ntype ControllerConfig = {\n accountSyncing?: {\n maxNumberOfAccountsToAdd?: number;\n /**\n * Callback that fires when account sync adds an account.\n * This is used for analytics.\n */\n onAccountAdded?: (profileId: string) => void;\n\n /**\n * Callback that fires when account sync updates the name of an account.\n * This is used for analytics.\n */\n onAccountNameUpdated?: (profileId: string) => void;\n\n /**\n * Callback that fires when an erroneous situation happens during account sync.\n * This is used for analytics.\n */\n onAccountSyncErroneousSituation?: (\n profileId: string,\n situationMessage: string,\n sentryContext?: Record<string, unknown>,\n ) => void;\n };\n\n networkSyncing?: {\n maxNumberOfNetworksToAdd?: number;\n /**\n * Callback that fires when network sync adds a network\n * This is used for analytics.\n *\n * @param profileId - ID for a given User (shared cross devices once authenticated)\n * @param chainId - Chain ID for the network added (in hex)\n */\n onNetworkAdded?: (profileId: string, chainId: string) => void;\n /**\n * Callback that fires when network sync updates a network\n * This is used for analytics.\n *\n * @param profileId - ID for a given User (shared cross devices once authenticated)\n * @param chainId - Chain ID for the network added (in hex)\n */\n onNetworkUpdated?: (profileId: string, chainId: string) => void;\n /**\n * Callback that fires when network sync deletes a network\n * This is used for analytics.\n *\n * @param profileId - ID for a given User (shared cross devices once authenticated)\n * @param chainId - Chain ID for the network added (in hex)\n */\n onNetworkRemoved?: (profileId: string, chainId: string) => void;\n };\n};\n\n// Messenger Actions\ntype CreateActionsObj<Controller extends keyof UserStorageController> = {\n [K in Controller]: {\n type: `${typeof controllerName}:${K}`;\n handler: UserStorageController[K];\n };\n};\ntype ActionsObj = CreateActionsObj<\n | 'performGetStorage'\n | 'performGetStorageAllFeatureEntries'\n | 'performSetStorage'\n | 'getStorageKey'\n | 'enableProfileSyncing'\n | 'disableProfileSyncing'\n | 'syncInternalAccountsWithUserStorage'\n | 'saveInternalAccountToUserStorage'\n>;\nexport type UserStorageControllerGetStateAction = ControllerGetStateAction<\n typeof controllerName,\n UserStorageControllerState\n>;\nexport type Actions =\n | ActionsObj[keyof ActionsObj]\n | UserStorageControllerGetStateAction;\nexport type UserStorageControllerPerformGetStorage =\n ActionsObj['performGetStorage'];\nexport type UserStorageControllerPerformGetStorageAllFeatureEntries =\n ActionsObj['performGetStorageAllFeatureEntries'];\nexport type UserStorageControllerPerformSetStorage =\n ActionsObj['performSetStorage'];\nexport type UserStorageControllerGetStorageKey = ActionsObj['getStorageKey'];\nexport type UserStorageControllerEnableProfileSyncing =\n ActionsObj['enableProfileSyncing'];\nexport type UserStorageControllerDisableProfileSyncing =\n ActionsObj['disableProfileSyncing'];\nexport type UserStorageControllerSyncInternalAccountsWithUserStorage =\n ActionsObj['syncInternalAccountsWithUserStorage'];\nexport type UserStorageControllerSaveInternalAccountToUserStorage =\n ActionsObj['saveInternalAccountToUserStorage'];\n\nexport type AllowedActions =\n // Keyring Requests\n | KeyringControllerGetStateAction\n // Snap Requests\n | HandleSnapRequest\n // Auth Requests\n | AuthenticationControllerGetBearerToken\n | AuthenticationControllerGetSessionProfile\n | AuthenticationControllerPerformSignIn\n | AuthenticationControllerIsSignedIn\n | AuthenticationControllerPerformSignOut\n // Account Syncing\n | AccountsControllerListAccountsAction\n | AccountsControllerUpdateAccountMetadataAction\n | KeyringControllerAddNewAccountAction\n // Network Syncing\n | NetworkControllerGetStateAction\n | NetworkControllerAddNetworkAction\n | NetworkControllerRemoveNetworkAction\n | NetworkControllerUpdateNetworkAction;\n\n// Messenger events\nexport type UserStorageControllerStateChangeEvent = ControllerStateChangeEvent<\n typeof controllerName,\n UserStorageControllerState\n>;\nexport type UserStorageControllerAccountSyncingInProgress = {\n type: `${typeof controllerName}:accountSyncingInProgress`;\n payload: [boolean];\n};\nexport type UserStorageControllerAccountSyncingComplete = {\n type: `${typeof controllerName}:accountSyncingComplete`;\n payload: [boolean];\n};\nexport type Events =\n | UserStorageControllerStateChangeEvent\n | UserStorageControllerAccountSyncingInProgress\n | UserStorageControllerAccountSyncingComplete;\n\nexport type AllowedEvents =\n | UserStorageControllerStateChangeEvent\n | UserStorageControllerAccountSyncingInProgress\n | UserStorageControllerAccountSyncingComplete\n | KeyringControllerLockEvent\n | KeyringControllerUnlockEvent\n // Account Syncing Events\n | AccountsControllerAccountAddedEvent\n | AccountsControllerAccountRenamedEvent\n // Network Syncing Events\n | NetworkControllerNetworkRemovedEvent;\n\n// Messenger\nexport type UserStorageControllerMessenger = RestrictedMessenger<\n typeof controllerName,\n Actions | AllowedActions,\n Events | AllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n\n/**\n * Reusable controller that allows any team to store synchronized data for a given user.\n * These can be settings shared cross MetaMask clients, or data we want to persist when uninstalling/reinstalling.\n *\n * NOTE:\n * - data stored on UserStorage is FULLY encrypted, with the only keys stored/managed on the client.\n * - No one can access this data unless they are have the SRP and are able to run the signing snap.\n */\nexport default class UserStorageController extends BaseController<\n typeof controllerName,\n UserStorageControllerState,\n UserStorageControllerMessenger\n> {\n // This is replaced with the actual value in the constructor\n // We will remove this once the feature will be released\n readonly #env = {\n isAccountSyncingEnabled: false,\n isNetworkSyncingEnabled: false,\n };\n\n readonly #auth = {\n getBearerToken: async () => {\n return await this.messagingSystem.call(\n 'AuthenticationController:getBearerToken',\n );\n },\n getProfileId: async () => {\n const sessionProfile = await this.messagingSystem.call(\n 'AuthenticationController:getSessionProfile',\n );\n return sessionProfile?.profileId;\n },\n isSignedIn: () => {\n return this.messagingSystem.call('AuthenticationController:isSignedIn');\n },\n signIn: async () => {\n return await this.messagingSystem.call(\n 'AuthenticationController:performSignIn',\n );\n },\n signOut: async () => {\n return this.messagingSystem.call(\n 'AuthenticationController:performSignOut',\n );\n },\n };\n\n readonly #config?: ControllerConfig;\n\n #isUnlocked = false;\n\n readonly #keyringController = {\n setupLockedStateSubscriptions: () => {\n const { isUnlocked } = this.messagingSystem.call(\n 'KeyringController:getState',\n );\n this.#isUnlocked = isUnlocked;\n\n this.messagingSystem.subscribe('KeyringController:unlock', () => {\n this.#isUnlocked = true;\n });\n\n this.messagingSystem.subscribe('KeyringController:lock', () => {\n this.#isUnlocked = false;\n });\n },\n };\n\n readonly #nativeScryptCrypto: NativeScrypt | undefined = undefined;\n\n constructor({\n messenger,\n state,\n env,\n config,\n nativeScryptCrypto,\n }: {\n messenger: UserStorageControllerMessenger;\n state?: UserStorageControllerState;\n config?: ControllerConfig;\n env?: {\n isAccountSyncingEnabled?: boolean;\n isNetworkSyncingEnabled?: boolean;\n };\n nativeScryptCrypto?: NativeScrypt;\n }) {\n super({\n messenger,\n metadata,\n name: controllerName,\n state: { ...defaultState, ...state },\n });\n\n this.#env.isAccountSyncingEnabled = Boolean(env?.isAccountSyncingEnabled);\n this.#env.isNetworkSyncingEnabled = Boolean(env?.isNetworkSyncingEnabled);\n this.#config = config;\n\n this.#keyringController.setupLockedStateSubscriptions();\n this.#registerMessageHandlers();\n this.#nativeScryptCrypto = nativeScryptCrypto;\n\n // Account Syncing\n if (this.#env.isAccountSyncingEnabled) {\n setupAccountSyncingSubscriptions(\n { isAccountSyncingEnabled: true },\n {\n getUserStorageControllerInstance: () => this,\n getMessenger: () => this.messagingSystem,\n },\n );\n }\n\n // Network Syncing\n if (this.#env.isNetworkSyncingEnabled) {\n startNetworkSyncing({\n messenger,\n getStorageConfig: () => this.#getStorageOptions(),\n isMutationSyncBlocked: () =>\n !this.state.hasNetworkSyncingSyncedAtLeastOnce,\n });\n }\n }\n\n /**\n * Constructor helper for registering this controller's messaging system\n * actions.\n */\n #registerMessageHandlers(): void {\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:performGetStorage',\n this.performGetStorage.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:performGetStorageAllFeatureEntries',\n this.performGetStorageAllFeatureEntries.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:performSetStorage',\n this.performSetStorage.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:getStorageKey',\n this.getStorageKey.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:enableProfileSyncing',\n this.enableProfileSyncing.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:disableProfileSyncing',\n this.disableProfileSyncing.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:syncInternalAccountsWithUserStorage',\n this.syncInternalAccountsWithUserStorage.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n 'UserStorageController:saveInternalAccountToUserStorage',\n this.saveInternalAccountToUserStorage.bind(this),\n );\n }\n\n async #getStorageOptions() {\n if (!this.state.isProfileSyncingEnabled) {\n return null;\n }\n\n const { storageKey, bearerToken } =\n await this.#getStorageKeyAndBearerToken();\n return {\n storageKey,\n bearerToken,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n };\n }\n\n public async enableProfileSyncing(): Promise<void> {\n try {\n this.#setIsProfileSyncingUpdateLoading(true);\n\n const isSignedIn = this.#auth.isSignedIn();\n if (!isSignedIn) {\n await this.#auth.signIn();\n }\n\n this.update((state) => {\n state.isProfileSyncingEnabled = true;\n });\n\n this.#setIsProfileSyncingUpdateLoading(false);\n } catch (e) {\n this.#setIsProfileSyncingUpdateLoading(false);\n const errorMessage = e instanceof Error ? e.message : JSON.stringify(e);\n throw new Error(\n `${controllerName} - failed to enable profile syncing - ${errorMessage}`,\n );\n }\n }\n\n public async disableProfileSyncing(): Promise<void> {\n const isAlreadyDisabled = !this.state.isProfileSyncingEnabled;\n if (isAlreadyDisabled) {\n return;\n }\n\n try {\n this.#setIsProfileSyncingUpdateLoading(true);\n\n this.#setIsProfileSyncingUpdateLoading(false);\n\n this.update((state) => {\n state.isProfileSyncingEnabled = false;\n });\n } catch (e) {\n this.#setIsProfileSyncingUpdateLoading(false);\n const errorMessage = e instanceof Error ? e.message : JSON.stringify(e);\n throw new Error(\n `${controllerName} - failed to disable profile syncing - ${errorMessage}`,\n );\n }\n }\n\n /**\n * Allows retrieval of stored data. Data stored is string formatted.\n * Developers can extend the entry path and entry name through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}.${key}` that matches schema\n * @returns the decrypted string contents found from user storage (or null if not found)\n */\n public async performGetStorage(\n path: UserStoragePathWithFeatureAndKey,\n ): Promise<string | null> {\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n const result = await getUserStorage({\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n\n return result;\n }\n\n /**\n * Allows retrieval of all stored data for a specific feature. Data stored is formatted as an array of strings.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @returns the array of decrypted string contents found from user storage (or null if not found)\n */\n public async performGetStorageAllFeatureEntries(\n path: UserStoragePathWithFeatureOnly,\n ): Promise<string[] | null> {\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n const result = await getUserStorageAllFeatureEntries({\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n\n return result;\n }\n\n /**\n * Allows storage of user data. Data stored must be string formatted.\n * Developers can extend the entry path and entry name through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}.${key}` that matches schema\n * @param value - The string data you want to store.\n * @returns nothing. NOTE that an error is thrown if fails to store data.\n */\n public async performSetStorage(\n path: UserStoragePathWithFeatureAndKey,\n value: string,\n ): Promise<void> {\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await upsertUserStorage(value, {\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n }\n\n /**\n * Allows storage of multiple user data entries for one specific feature. Data stored must be string formatted.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @param values - data to store, in the form of an array of `[entryKey, entryValue]` pairs\n * @returns nothing. NOTE that an error is thrown if fails to store data.\n */\n public async performBatchSetStorage<\n FeatureName extends UserStoragePathWithFeatureOnly,\n >(\n path: FeatureName,\n values: [UserStorageFeatureKeys<FeatureName>, string][],\n ): Promise<void> {\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await batchUpsertUserStorage(values, {\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n }\n\n /**\n * Allows deletion of user data. Developers can extend the entry path and entry name through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}.${key}` that matches schema\n * @returns nothing. NOTE that an error is thrown if fails to delete data.\n */\n public async performDeleteStorage(\n path: UserStoragePathWithFeatureAndKey,\n ): Promise<void> {\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await deleteUserStorage({\n path,\n bearerToken,\n storageKey,\n });\n }\n\n /**\n * Allows deletion of all user data entries for a specific feature.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @returns nothing. NOTE that an error is thrown if fails to delete data.\n */\n public async performDeleteStorageAllFeatureEntries(\n path: UserStoragePathWithFeatureOnly,\n ): Promise<void> {\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await deleteUserStorageAllFeatureEntries({\n path,\n bearerToken,\n storageKey,\n });\n }\n\n /**\n * Allows delete of multiple user data entries for one specific feature. Data deleted must be string formatted.\n * Developers can extend the entry path through the `schema.ts` file.\n *\n * @param path - string in the form of `${feature}` that matches schema\n * @param values - data to store, in the form of an array of entryKey[]\n * @returns nothing. NOTE that an error is thrown if fails to store data.\n */\n public async performBatchDeleteStorage<\n FeatureName extends UserStoragePathWithFeatureOnly,\n >(\n path: FeatureName,\n values: UserStorageFeatureKeys<FeatureName>[],\n ): Promise<void> {\n const { bearerToken, storageKey } =\n await this.#getStorageKeyAndBearerToken();\n\n await batchDeleteUserStorage(values, {\n path,\n bearerToken,\n storageKey,\n nativeScryptCrypto: this.#nativeScryptCrypto,\n });\n }\n\n /**\n * Retrieves the storage key, for internal use only!\n *\n * @returns the storage key\n */\n public async getStorageKey(): Promise<string> {\n const storageKey = await this.#createStorageKey();\n return storageKey;\n }\n\n /**\n * Utility to get the bearer token and storage key\n *\n * @returns the bearer token and storage key\n */\n async #getStorageKeyAndBearerToken(): Promise<{\n bearerToken: string;\n storageKey: string;\n }> {\n const bearerToken = await this.#auth.getBearerToken();\n if (!bearerToken) {\n throw new Error('UserStorageController - unable to get bearer token');\n }\n const storageKey = await this.#createStorageKey();\n\n return { bearerToken, storageKey };\n }\n\n /**\n * Rather than storing the storage key, we can compute the storage key when needed.\n *\n * @returns the storage key\n */\n async #createStorageKey(): Promise<string> {\n const id: string = await this.#auth.getProfileId();\n if (!id) {\n throw new Error('UserStorageController - unable to create storage key');\n }\n\n const storageKeySignature = await this.#snapSignMessage(`metamask:${id}`);\n const storageKey = createSHA256Hash(storageKeySignature);\n return storageKey;\n }\n\n #_snapSignMessageCache: Record<`metamask:${string}`, string> = {};\n\n /**\n * Signs a specific message using an underlying auth snap.\n *\n * @param message - A specific tagged message to sign.\n * @returns A Signature created by the snap.\n */\n async #snapSignMessage(message: `metamask:${string}`): Promise<string> {\n if (this.#_snapSignMessageCache[message]) {\n return this.#_snapSignMessageCache[message];\n }\n\n if (!this.#isUnlocked) {\n throw new Error(\n '#snapSignMessage - unable to call snap, wallet is locked',\n );\n }\n\n const result = (await this.messagingSystem.call(\n 'SnapController:handleRequest',\n createSnapSignMessageRequest(message),\n )) as string;\n\n this.#_snapSignMessageCache[message] = result;\n\n return result;\n }\n\n #setIsProfileSyncingUpdateLoading(\n isProfileSyncingUpdateLoading: boolean,\n ): void {\n this.update((state) => {\n state.isProfileSyncingUpdateLoading = isProfileSyncingUpdateLoading;\n });\n }\n\n async setHasAccountSyncingSyncedAtLeastOnce(\n hasAccountSyncingSyncedAtLeastOnce: boolean,\n ): Promise<void> {\n this.update((state) => {\n state.hasAccountSyncingSyncedAtLeastOnce =\n hasAccountSyncingSyncedAtLeastOnce;\n });\n }\n\n async setIsAccountSyncingReadyToBeDispatched(\n isAccountSyncingReadyToBeDispatched: boolean,\n ): Promise<void> {\n this.update((state) => {\n state.isAccountSyncingReadyToBeDispatched =\n isAccountSyncingReadyToBeDispatched;\n });\n }\n\n async setIsAccountSyncingInProgress(\n isAccountSyncingInProgress: boolean,\n ): Promise<void> {\n this.update((state) => {\n state.isAccountSyncingInProgress = isAccountSyncingInProgress;\n });\n }\n\n /**\n * Syncs the internal accounts list with the user storage accounts list.\n * This method is used to make sure that the internal accounts list is up-to-date with the user storage accounts list and vice-versa.\n * It will add new accounts to the internal accounts list, update/merge conflicting names and re-upload the results in some cases to the user storage.\n */\n async syncInternalAccountsWithUserStorage(): Promise<void> {\n const profileId = await this.#auth.getProfileId();\n\n await syncInternalAccountsWithUserStorage(\n {\n isAccountSyncingEnabled: this.#env.isAccountSyncingEnabled,\n maxNumberOfAccountsToAdd:\n this.#config?.accountSyncing?.maxNumberOfAccountsToAdd,\n onAccountAdded: () =>\n this.#config?.accountSyncing?.onAccountAdded?.(profileId),\n onAccountNameUpdated: () =>\n this.#config?.accountSyncing?.onAccountNameUpdated?.(profileId),\n onAccountSyncErroneousSituation: (situationMessage, sentryContext) =>\n this.#config?.accountSyncing?.onAccountSyncErroneousSituation?.(\n profileId,\n situationMessage,\n sentryContext,\n ),\n },\n {\n getMessenger: () => this.messagingSystem,\n getUserStorageControllerInstance: () => this,\n },\n );\n }\n\n /**\n * Saves an individual internal account to the user storage.\n *\n * @param internalAccount - The internal account to save\n */\n async saveInternalAccountToUserStorage(\n internalAccount: InternalAccount,\n ): Promise<void> {\n await saveInternalAccountToUserStorage(\n internalAccount,\n { isAccountSyncingEnabled: this.#env.isAccountSyncingEnabled },\n {\n getMessenger: () => this.messagingSystem,\n getUserStorageControllerInstance: () => this,\n },\n );\n }\n\n async syncNetworks() {\n if (!this.#env.isNetworkSyncingEnabled) {\n return;\n }\n\n const profileId = await this.#auth.getProfileId();\n\n await performMainNetworkSync({\n messenger: this.messagingSystem,\n getStorageConfig: () => this.#getStorageOptions(),\n maxNetworksToAdd: this.#config?.networkSyncing?.maxNumberOfNetworksToAdd,\n onNetworkAdded: (cId) =>\n this.#config?.networkSyncing?.onNetworkAdded?.(profileId, cId),\n onNetworkUpdated: (cId) =>\n this.#config?.networkSyncing?.onNetworkUpdated?.(profileId, cId),\n onNetworkRemoved: (cId) =>\n this.#config?.networkSyncing?.onNetworkRemoved?.(profileId, cId),\n });\n\n this.update((s) => {\n s.hasNetworkSyncingSyncedAtLeastOnce = true;\n });\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AccountsControllerListAccountsAction, AccountsControllerUpdateAccountMetadataAction, AccountsControllerAccountRenamedEvent, AccountsControllerAccountAddedEvent } from "@metamask/accounts-controller";
|
|
2
|
-
import type { ControllerGetStateAction, ControllerStateChangeEvent,
|
|
2
|
+
import type { ControllerGetStateAction, ControllerStateChangeEvent, RestrictedMessenger } from "@metamask/base-controller";
|
|
3
3
|
import { BaseController } from "@metamask/base-controller";
|
|
4
4
|
import { type KeyringControllerGetStateAction, type KeyringControllerLockEvent, type KeyringControllerUnlockEvent, type KeyringControllerAddNewAccountAction } from "@metamask/keyring-controller";
|
|
5
5
|
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
@@ -9,14 +9,6 @@ import type { UserStorageFeatureKeys } from "../../shared/storage-schema.cjs";
|
|
|
9
9
|
import { type UserStoragePathWithFeatureAndKey, type UserStoragePathWithFeatureOnly } from "../../shared/storage-schema.cjs";
|
|
10
10
|
import type { NativeScrypt } from "../../shared/types/encryption.cjs";
|
|
11
11
|
import type { AuthenticationControllerGetBearerToken, AuthenticationControllerGetSessionProfile, AuthenticationControllerIsSignedIn, AuthenticationControllerPerformSignIn, AuthenticationControllerPerformSignOut } from "../authentication/AuthenticationController.cjs";
|
|
12
|
-
export declare type NotificationServicesControllerDisableNotificationServices = {
|
|
13
|
-
type: `NotificationServicesController:disableNotificationServices`;
|
|
14
|
-
handler: () => Promise<void>;
|
|
15
|
-
};
|
|
16
|
-
export declare type NotificationServicesControllerSelectIsNotificationServicesEnabled = {
|
|
17
|
-
type: `NotificationServicesController:selectIsNotificationServicesEnabled`;
|
|
18
|
-
handler: () => boolean;
|
|
19
|
-
};
|
|
20
12
|
declare const controllerName = "UserStorageController";
|
|
21
13
|
export type UserStorageControllerState = {
|
|
22
14
|
/**
|
|
@@ -69,6 +61,7 @@ type ControllerConfig = {
|
|
|
69
61
|
/**
|
|
70
62
|
* Callback that fires when network sync adds a network
|
|
71
63
|
* This is used for analytics.
|
|
64
|
+
*
|
|
72
65
|
* @param profileId - ID for a given User (shared cross devices once authenticated)
|
|
73
66
|
* @param chainId - Chain ID for the network added (in hex)
|
|
74
67
|
*/
|
|
@@ -76,6 +69,7 @@ type ControllerConfig = {
|
|
|
76
69
|
/**
|
|
77
70
|
* Callback that fires when network sync updates a network
|
|
78
71
|
* This is used for analytics.
|
|
72
|
+
*
|
|
79
73
|
* @param profileId - ID for a given User (shared cross devices once authenticated)
|
|
80
74
|
* @param chainId - Chain ID for the network added (in hex)
|
|
81
75
|
*/
|
|
@@ -83,6 +77,7 @@ type ControllerConfig = {
|
|
|
83
77
|
/**
|
|
84
78
|
* Callback that fires when network sync deletes a network
|
|
85
79
|
* This is used for analytics.
|
|
80
|
+
*
|
|
86
81
|
* @param profileId - ID for a given User (shared cross devices once authenticated)
|
|
87
82
|
* @param chainId - Chain ID for the network added (in hex)
|
|
88
83
|
*/
|
|
@@ -106,7 +101,7 @@ export type UserStorageControllerEnableProfileSyncing = ActionsObj['enableProfil
|
|
|
106
101
|
export type UserStorageControllerDisableProfileSyncing = ActionsObj['disableProfileSyncing'];
|
|
107
102
|
export type UserStorageControllerSyncInternalAccountsWithUserStorage = ActionsObj['syncInternalAccountsWithUserStorage'];
|
|
108
103
|
export type UserStorageControllerSaveInternalAccountToUserStorage = ActionsObj['saveInternalAccountToUserStorage'];
|
|
109
|
-
export type AllowedActions = KeyringControllerGetStateAction | HandleSnapRequest | AuthenticationControllerGetBearerToken | AuthenticationControllerGetSessionProfile | AuthenticationControllerPerformSignIn | AuthenticationControllerIsSignedIn | AuthenticationControllerPerformSignOut |
|
|
104
|
+
export type AllowedActions = KeyringControllerGetStateAction | HandleSnapRequest | AuthenticationControllerGetBearerToken | AuthenticationControllerGetSessionProfile | AuthenticationControllerPerformSignIn | AuthenticationControllerIsSignedIn | AuthenticationControllerPerformSignOut | AccountsControllerListAccountsAction | AccountsControllerUpdateAccountMetadataAction | KeyringControllerAddNewAccountAction | NetworkControllerGetStateAction | NetworkControllerAddNetworkAction | NetworkControllerRemoveNetworkAction | NetworkControllerUpdateNetworkAction;
|
|
110
105
|
export type UserStorageControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, UserStorageControllerState>;
|
|
111
106
|
export type UserStorageControllerAccountSyncingInProgress = {
|
|
112
107
|
type: `${typeof controllerName}:accountSyncingInProgress`;
|
|
@@ -118,7 +113,7 @@ export type UserStorageControllerAccountSyncingComplete = {
|
|
|
118
113
|
};
|
|
119
114
|
export type Events = UserStorageControllerStateChangeEvent | UserStorageControllerAccountSyncingInProgress | UserStorageControllerAccountSyncingComplete;
|
|
120
115
|
export type AllowedEvents = UserStorageControllerStateChangeEvent | UserStorageControllerAccountSyncingInProgress | UserStorageControllerAccountSyncingComplete | KeyringControllerLockEvent | KeyringControllerUnlockEvent | AccountsControllerAccountAddedEvent | AccountsControllerAccountRenamedEvent | NetworkControllerNetworkRemovedEvent;
|
|
121
|
-
export type UserStorageControllerMessenger =
|
|
116
|
+
export type UserStorageControllerMessenger = RestrictedMessenger<typeof controllerName, Actions | AllowedActions, Events | AllowedEvents, AllowedActions['type'], AllowedEvents['type']>;
|
|
122
117
|
/**
|
|
123
118
|
* Reusable controller that allows any team to store synchronized data for a given user.
|
|
124
119
|
* These can be settings shared cross MetaMask clients, or data we want to persist when uninstalling/reinstalling.
|
|
@@ -129,8 +124,7 @@ export type UserStorageControllerMessenger = RestrictedControllerMessenger<typeo
|
|
|
129
124
|
*/
|
|
130
125
|
export default class UserStorageController extends BaseController<typeof controllerName, UserStorageControllerState, UserStorageControllerMessenger> {
|
|
131
126
|
#private;
|
|
132
|
-
|
|
133
|
-
constructor({ messenger, state, env, config, getMetaMetricsState, nativeScryptCrypto, }: {
|
|
127
|
+
constructor({ messenger, state, env, config, nativeScryptCrypto, }: {
|
|
134
128
|
messenger: UserStorageControllerMessenger;
|
|
135
129
|
state?: UserStorageControllerState;
|
|
136
130
|
config?: ControllerConfig;
|
|
@@ -138,11 +132,9 @@ export default class UserStorageController extends BaseController<typeof control
|
|
|
138
132
|
isAccountSyncingEnabled?: boolean;
|
|
139
133
|
isNetworkSyncingEnabled?: boolean;
|
|
140
134
|
};
|
|
141
|
-
getMetaMetricsState: () => boolean;
|
|
142
135
|
nativeScryptCrypto?: NativeScrypt;
|
|
143
136
|
});
|
|
144
137
|
enableProfileSyncing(): Promise<void>;
|
|
145
|
-
setIsProfileSyncingEnabled(isProfileSyncingEnabled: boolean): Promise<void>;
|
|
146
138
|
disableProfileSyncing(): Promise<void>;
|
|
147
139
|
/**
|
|
148
140
|
* Allows retrieval of stored data. Data stored is string formatted.
|
|
@@ -219,6 +211,7 @@ export default class UserStorageController extends BaseController<typeof control
|
|
|
219
211
|
syncInternalAccountsWithUserStorage(): Promise<void>;
|
|
220
212
|
/**
|
|
221
213
|
* Saves an individual internal account to the user storage.
|
|
214
|
+
*
|
|
222
215
|
* @param internalAccount - The internal account to save
|
|
223
216
|
*/
|
|
224
217
|
saveInternalAccountToUserStorage(internalAccount: InternalAccount): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserStorageController.d.cts","sourceRoot":"","sources":["../../../src/controllers/user-storage/UserStorageController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oCAAoC,EACpC,6CAA6C,EAC7C,qCAAqC,EACrC,mCAAmC,EACpC,sCAAsC;AACvC,OAAO,KAAK,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,
|
|
1
|
+
{"version":3,"file":"UserStorageController.d.cts","sourceRoot":"","sources":["../../../src/controllers/user-storage/UserStorageController.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AccountsControllerListAccountsAction, AccountsControllerUpdateAccountMetadataAction, AccountsControllerAccountRenamedEvent, AccountsControllerAccountAddedEvent } from "@metamask/accounts-controller";
|
|
2
|
-
import type { ControllerGetStateAction, ControllerStateChangeEvent,
|
|
2
|
+
import type { ControllerGetStateAction, ControllerStateChangeEvent, RestrictedMessenger } from "@metamask/base-controller";
|
|
3
3
|
import { BaseController } from "@metamask/base-controller";
|
|
4
4
|
import { type KeyringControllerGetStateAction, type KeyringControllerLockEvent, type KeyringControllerUnlockEvent, type KeyringControllerAddNewAccountAction } from "@metamask/keyring-controller";
|
|
5
5
|
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
@@ -9,14 +9,6 @@ import type { UserStorageFeatureKeys } from "../../shared/storage-schema.mjs";
|
|
|
9
9
|
import { type UserStoragePathWithFeatureAndKey, type UserStoragePathWithFeatureOnly } from "../../shared/storage-schema.mjs";
|
|
10
10
|
import type { NativeScrypt } from "../../shared/types/encryption.mjs";
|
|
11
11
|
import type { AuthenticationControllerGetBearerToken, AuthenticationControllerGetSessionProfile, AuthenticationControllerIsSignedIn, AuthenticationControllerPerformSignIn, AuthenticationControllerPerformSignOut } from "../authentication/AuthenticationController.mjs";
|
|
12
|
-
export declare type NotificationServicesControllerDisableNotificationServices = {
|
|
13
|
-
type: `NotificationServicesController:disableNotificationServices`;
|
|
14
|
-
handler: () => Promise<void>;
|
|
15
|
-
};
|
|
16
|
-
export declare type NotificationServicesControllerSelectIsNotificationServicesEnabled = {
|
|
17
|
-
type: `NotificationServicesController:selectIsNotificationServicesEnabled`;
|
|
18
|
-
handler: () => boolean;
|
|
19
|
-
};
|
|
20
12
|
declare const controllerName = "UserStorageController";
|
|
21
13
|
export type UserStorageControllerState = {
|
|
22
14
|
/**
|
|
@@ -69,6 +61,7 @@ type ControllerConfig = {
|
|
|
69
61
|
/**
|
|
70
62
|
* Callback that fires when network sync adds a network
|
|
71
63
|
* This is used for analytics.
|
|
64
|
+
*
|
|
72
65
|
* @param profileId - ID for a given User (shared cross devices once authenticated)
|
|
73
66
|
* @param chainId - Chain ID for the network added (in hex)
|
|
74
67
|
*/
|
|
@@ -76,6 +69,7 @@ type ControllerConfig = {
|
|
|
76
69
|
/**
|
|
77
70
|
* Callback that fires when network sync updates a network
|
|
78
71
|
* This is used for analytics.
|
|
72
|
+
*
|
|
79
73
|
* @param profileId - ID for a given User (shared cross devices once authenticated)
|
|
80
74
|
* @param chainId - Chain ID for the network added (in hex)
|
|
81
75
|
*/
|
|
@@ -83,6 +77,7 @@ type ControllerConfig = {
|
|
|
83
77
|
/**
|
|
84
78
|
* Callback that fires when network sync deletes a network
|
|
85
79
|
* This is used for analytics.
|
|
80
|
+
*
|
|
86
81
|
* @param profileId - ID for a given User (shared cross devices once authenticated)
|
|
87
82
|
* @param chainId - Chain ID for the network added (in hex)
|
|
88
83
|
*/
|
|
@@ -106,7 +101,7 @@ export type UserStorageControllerEnableProfileSyncing = ActionsObj['enableProfil
|
|
|
106
101
|
export type UserStorageControllerDisableProfileSyncing = ActionsObj['disableProfileSyncing'];
|
|
107
102
|
export type UserStorageControllerSyncInternalAccountsWithUserStorage = ActionsObj['syncInternalAccountsWithUserStorage'];
|
|
108
103
|
export type UserStorageControllerSaveInternalAccountToUserStorage = ActionsObj['saveInternalAccountToUserStorage'];
|
|
109
|
-
export type AllowedActions = KeyringControllerGetStateAction | HandleSnapRequest | AuthenticationControllerGetBearerToken | AuthenticationControllerGetSessionProfile | AuthenticationControllerPerformSignIn | AuthenticationControllerIsSignedIn | AuthenticationControllerPerformSignOut |
|
|
104
|
+
export type AllowedActions = KeyringControllerGetStateAction | HandleSnapRequest | AuthenticationControllerGetBearerToken | AuthenticationControllerGetSessionProfile | AuthenticationControllerPerformSignIn | AuthenticationControllerIsSignedIn | AuthenticationControllerPerformSignOut | AccountsControllerListAccountsAction | AccountsControllerUpdateAccountMetadataAction | KeyringControllerAddNewAccountAction | NetworkControllerGetStateAction | NetworkControllerAddNetworkAction | NetworkControllerRemoveNetworkAction | NetworkControllerUpdateNetworkAction;
|
|
110
105
|
export type UserStorageControllerStateChangeEvent = ControllerStateChangeEvent<typeof controllerName, UserStorageControllerState>;
|
|
111
106
|
export type UserStorageControllerAccountSyncingInProgress = {
|
|
112
107
|
type: `${typeof controllerName}:accountSyncingInProgress`;
|
|
@@ -118,7 +113,7 @@ export type UserStorageControllerAccountSyncingComplete = {
|
|
|
118
113
|
};
|
|
119
114
|
export type Events = UserStorageControllerStateChangeEvent | UserStorageControllerAccountSyncingInProgress | UserStorageControllerAccountSyncingComplete;
|
|
120
115
|
export type AllowedEvents = UserStorageControllerStateChangeEvent | UserStorageControllerAccountSyncingInProgress | UserStorageControllerAccountSyncingComplete | KeyringControllerLockEvent | KeyringControllerUnlockEvent | AccountsControllerAccountAddedEvent | AccountsControllerAccountRenamedEvent | NetworkControllerNetworkRemovedEvent;
|
|
121
|
-
export type UserStorageControllerMessenger =
|
|
116
|
+
export type UserStorageControllerMessenger = RestrictedMessenger<typeof controllerName, Actions | AllowedActions, Events | AllowedEvents, AllowedActions['type'], AllowedEvents['type']>;
|
|
122
117
|
/**
|
|
123
118
|
* Reusable controller that allows any team to store synchronized data for a given user.
|
|
124
119
|
* These can be settings shared cross MetaMask clients, or data we want to persist when uninstalling/reinstalling.
|
|
@@ -129,8 +124,7 @@ export type UserStorageControllerMessenger = RestrictedControllerMessenger<typeo
|
|
|
129
124
|
*/
|
|
130
125
|
export default class UserStorageController extends BaseController<typeof controllerName, UserStorageControllerState, UserStorageControllerMessenger> {
|
|
131
126
|
#private;
|
|
132
|
-
|
|
133
|
-
constructor({ messenger, state, env, config, getMetaMetricsState, nativeScryptCrypto, }: {
|
|
127
|
+
constructor({ messenger, state, env, config, nativeScryptCrypto, }: {
|
|
134
128
|
messenger: UserStorageControllerMessenger;
|
|
135
129
|
state?: UserStorageControllerState;
|
|
136
130
|
config?: ControllerConfig;
|
|
@@ -138,11 +132,9 @@ export default class UserStorageController extends BaseController<typeof control
|
|
|
138
132
|
isAccountSyncingEnabled?: boolean;
|
|
139
133
|
isNetworkSyncingEnabled?: boolean;
|
|
140
134
|
};
|
|
141
|
-
getMetaMetricsState: () => boolean;
|
|
142
135
|
nativeScryptCrypto?: NativeScrypt;
|
|
143
136
|
});
|
|
144
137
|
enableProfileSyncing(): Promise<void>;
|
|
145
|
-
setIsProfileSyncingEnabled(isProfileSyncingEnabled: boolean): Promise<void>;
|
|
146
138
|
disableProfileSyncing(): Promise<void>;
|
|
147
139
|
/**
|
|
148
140
|
* Allows retrieval of stored data. Data stored is string formatted.
|
|
@@ -219,6 +211,7 @@ export default class UserStorageController extends BaseController<typeof control
|
|
|
219
211
|
syncInternalAccountsWithUserStorage(): Promise<void>;
|
|
220
212
|
/**
|
|
221
213
|
* Saves an individual internal account to the user storage.
|
|
214
|
+
*
|
|
222
215
|
* @param internalAccount - The internal account to save
|
|
223
216
|
*/
|
|
224
217
|
saveInternalAccountToUserStorage(internalAccount: InternalAccount): Promise<void>;
|