@metamask-previews/profile-sync-controller 7.0.1-preview-74b4a89 → 8.0.0-preview-7a21cbc
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 +18 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs +11 -3
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts +6 -3
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts +6 -3
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts.map +1 -1
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs +11 -3
- package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.cjs +8 -2
- 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 +3 -1
- 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 +3 -1
- 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 +8 -2
- package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.cjs +5 -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.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/controller-integration.mjs +6 -3
- package/dist/controllers/user-storage/account-syncing/controller-integration.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.cjs +3 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/sync-utils.d.cts +2 -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 +2 -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 +4 -2
- package/dist/controllers/user-storage/account-syncing/sync-utils.mjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.cjs +36 -6
- package/dist/controllers/user-storage/account-syncing/utils.cjs.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.d.cts +14 -4
- package/dist/controllers/user-storage/account-syncing/utils.d.cts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.d.mts +14 -4
- package/dist/controllers/user-storage/account-syncing/utils.d.mts.map +1 -1
- package/dist/controllers/user-storage/account-syncing/utils.mjs +33 -4
- package/dist/controllers/user-storage/account-syncing/utils.mjs.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [8.0.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add `perform{BatchSetStorage,DeleteStorage,BatchDeleteStorage}` as messenger actions ([#5311](https://github.com/MetaMask/core/pull/5311))
|
|
15
|
+
- Add optional `validateAgainstSchema` option when creating user storage entry paths ([#5326](https://github.com/MetaMask/core/pull/5326))
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- **BREAKING:** Bump `@metamask/accounts-controller` peer dependency from `^23.0.0` to `^24.0.0` ([#5318](https://github.com/MetaMask/core/pull/5318))
|
|
20
|
+
- Change `maxNumberOfAccountsToAdd` default value from `100` to `Infinity` ([#5322](https://github.com/MetaMask/core/pull/5322))
|
|
21
|
+
|
|
22
|
+
### Removed
|
|
23
|
+
|
|
24
|
+
- Removed unused events from `UserStorageController` ([#5324](https://github.com/MetaMask/core/pull/5324))
|
|
25
|
+
|
|
10
26
|
## [7.0.1]
|
|
11
27
|
|
|
12
28
|
### Changed
|
|
@@ -467,7 +483,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
467
483
|
|
|
468
484
|
- Initial release
|
|
469
485
|
|
|
470
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@
|
|
486
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@8.0.0...HEAD
|
|
487
|
+
[8.0.0]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@7.0.1...@metamask/profile-sync-controller@8.0.0
|
|
471
488
|
[7.0.1]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@7.0.0...@metamask/profile-sync-controller@7.0.1
|
|
472
489
|
[7.0.0]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@6.0.0...@metamask/profile-sync-controller@7.0.0
|
|
473
490
|
[6.0.0]: https://github.com/MetaMask/core/compare/@metamask/profile-sync-controller@5.0.0...@metamask/profile-sync-controller@6.0.0
|
|
@@ -17,6 +17,7 @@ function createCustomUserStorageMessenger(props) {
|
|
|
17
17
|
name: 'UserStorageController',
|
|
18
18
|
allowedActions: [
|
|
19
19
|
'KeyringController:getState',
|
|
20
|
+
'KeyringController:withKeyring',
|
|
20
21
|
'SnapController:handleRequest',
|
|
21
22
|
'AuthenticationController:getBearerToken',
|
|
22
23
|
'AuthenticationController:getSessionProfile',
|
|
@@ -65,9 +66,9 @@ function mockUserStorageMessenger(overrideMessengers) {
|
|
|
65
66
|
const mockAuthIsSignedIn = typedMockFn('AuthenticationController:isSignedIn').mockReturnValue(true);
|
|
66
67
|
const mockAuthPerformSignOut = typedMockFn('AuthenticationController:performSignOut');
|
|
67
68
|
const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');
|
|
68
|
-
// Untyped mock as there is a TS(2742) issue.
|
|
69
|
-
// This will return `InternalAccount[]`
|
|
70
69
|
const mockAccountsListAccounts = jest.fn();
|
|
70
|
+
const mockKeyringGetAccounts = jest.fn();
|
|
71
|
+
const mockKeyringAddAccounts = jest.fn();
|
|
71
72
|
const mockAccountsUpdateAccountMetadata = typedMockFn('AccountsController:updateAccountMetadata').mockResolvedValue(true);
|
|
72
73
|
const mockNetworkControllerGetState = typedMockFn('NetworkController:getState').mockReturnValue({
|
|
73
74
|
selectedNetworkClientId: '',
|
|
@@ -110,7 +111,12 @@ function mockUserStorageMessenger(overrideMessengers) {
|
|
|
110
111
|
}
|
|
111
112
|
if (actionType === 'KeyringController:withKeyring') {
|
|
112
113
|
const [, ...params] = typedArgs;
|
|
113
|
-
|
|
114
|
+
const [, operation] = params;
|
|
115
|
+
const keyring = {
|
|
116
|
+
getAccounts: mockKeyringGetAccounts,
|
|
117
|
+
addAccounts: mockKeyringAddAccounts,
|
|
118
|
+
};
|
|
119
|
+
return operation(keyring);
|
|
114
120
|
}
|
|
115
121
|
if (actionType === 'AccountsController:listAccounts') {
|
|
116
122
|
return mockAccountsListAccounts();
|
|
@@ -146,6 +152,8 @@ function mockUserStorageMessenger(overrideMessengers) {
|
|
|
146
152
|
mockAuthPerformSignIn,
|
|
147
153
|
mockAuthIsSignedIn,
|
|
148
154
|
mockAuthPerformSignOut,
|
|
155
|
+
mockKeyringGetAccounts,
|
|
156
|
+
mockKeyringAddAccounts,
|
|
149
157
|
mockKeyringWithKeyring,
|
|
150
158
|
mockAccountsUpdateAccountMetadata,
|
|
151
159
|
mockAccountsListAccounts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockMessenger.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NotNamespacedBy } from '@metamask/base-controller';\nimport { Messenger } from '@metamask/base-controller';\n\nimport { MOCK_STORAGE_KEY_SIGNATURE } from '.';\nimport type {\n AllowedActions,\n AllowedEvents,\n UserStorageControllerMessenger,\n} from '..';\n\ntype GetHandler<ActionType extends AllowedActions['type']> = Extract<\n AllowedActions,\n { type: ActionType }\n>['handler'];\n\ntype CallParams = {\n [K in AllowedActions['type']]: [\n K,\n ...Parameters<Extract<AllowedActions, { type: K }>['handler']>,\n ];\n}[AllowedActions['type']];\n\nconst typedMockFn = <\n ActionType extends AllowedActions['type'],\n Handler = GetHandler<ActionType>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Func extends (...args: any) => any = Handler extends (...args: any[]) => any\n ? Handler\n : never,\n>(\n _type: ActionType,\n) => jest.fn<ReturnType<Func>, Parameters<Func>>();\n\ntype ExternalEvents = NotNamespacedBy<\n 'UserStorageController',\n AllowedEvents['type']\n>;\n\n/**\n * creates a custom user storage messenger, in case tests need different permissions\n *\n * @param props - overrides\n * @param props.overrideEvents - override events\n * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls\n */\nexport function createCustomUserStorageMessenger(props?: {\n overrideEvents?: ExternalEvents[];\n}) {\n const baseMessenger = new Messenger<AllowedActions, AllowedEvents>();\n const messenger = baseMessenger.getRestricted({\n name: 'UserStorageController',\n allowedActions: [\n 'KeyringController:getState',\n 'SnapController:handleRequest',\n 'AuthenticationController:getBearerToken',\n 'AuthenticationController:getSessionProfile',\n 'AuthenticationController:isSignedIn',\n 'AuthenticationController:performSignOut',\n 'AuthenticationController:performSignIn',\n 'AccountsController:listAccounts',\n 'AccountsController:updateAccountMetadata',\n 'NetworkController:getState',\n 'NetworkController:addNetwork',\n 'NetworkController:updateNetwork',\n 'NetworkController:removeNetwork',\n ],\n allowedEvents: props?.overrideEvents ?? [\n 'KeyringController:lock',\n 'KeyringController:unlock',\n 'AccountsController:accountAdded',\n 'AccountsController:accountRenamed',\n 'NetworkController:networkRemoved',\n ],\n });\n\n return {\n baseMessenger,\n messenger,\n };\n}\n\ntype OverrideMessengers = {\n baseMessenger: Messenger<AllowedActions, AllowedEvents>;\n messenger: UserStorageControllerMessenger;\n};\n\n/**\n * Jest Mock Utility to generate a mock User Storage Messenger\n *\n * @param overrideMessengers - override messengers if need to modify the underlying permissions\n * @returns series of mocks to actions that can be called\n */\nexport function mockUserStorageMessenger(\n overrideMessengers?: OverrideMessengers,\n) {\n const { baseMessenger, messenger } =\n overrideMessengers ?? createCustomUserStorageMessenger();\n\n const mockSnapGetPublicKey = jest.fn().mockResolvedValue('MOCK_PUBLIC_KEY');\n const mockSnapSignMessage = jest\n .fn()\n .mockResolvedValue(MOCK_STORAGE_KEY_SIGNATURE);\n\n const mockAuthGetBearerToken = typedMockFn(\n 'AuthenticationController:getBearerToken',\n ).mockResolvedValue('MOCK_BEARER_TOKEN');\n\n const mockAuthGetSessionProfile = typedMockFn(\n 'AuthenticationController:getSessionProfile',\n ).mockResolvedValue({\n identifierId: '',\n profileId: 'MOCK_PROFILE_ID',\n });\n\n const mockAuthPerformSignIn = typedMockFn(\n 'AuthenticationController:performSignIn',\n ).mockResolvedValue('New Access Token');\n\n const mockAuthIsSignedIn = typedMockFn(\n 'AuthenticationController:isSignedIn',\n ).mockReturnValue(true);\n\n const mockAuthPerformSignOut = typedMockFn(\n 'AuthenticationController:performSignOut',\n );\n\n const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');\n\n // Untyped mock as there is a TS(2742) issue.\n // This will return `InternalAccount[]`\n const mockAccountsListAccounts = jest.fn();\n\n const mockAccountsUpdateAccountMetadata = typedMockFn(\n 'AccountsController:updateAccountMetadata',\n ).mockResolvedValue(true as never);\n\n const mockNetworkControllerGetState = typedMockFn(\n 'NetworkController:getState',\n ).mockReturnValue({\n selectedNetworkClientId: '',\n networksMetadata: {},\n networkConfigurationsByChainId: {},\n });\n\n const mockNetworkControllerAddNetwork = typedMockFn(\n 'NetworkController:addNetwork',\n );\n\n const mockNetworkControllerRemoveNetwork = typedMockFn(\n 'NetworkController:removeNetwork',\n );\n\n const mockNetworkControllerUpdateNetwork = typedMockFn(\n 'NetworkController:updateNetwork',\n );\n\n jest.spyOn(messenger, 'call').mockImplementation((...args) => {\n const typedArgs = args as unknown as CallParams;\n const [actionType] = typedArgs;\n\n if (actionType === 'SnapController:handleRequest') {\n const [, params] = typedArgs;\n if (params.request.method === 'getPublicKey') {\n return mockSnapGetPublicKey();\n }\n\n if (params.request.method === 'signMessage') {\n return mockSnapSignMessage();\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported SnapController:handleRequest call: ${\n params.request.method as string\n }`,\n );\n }\n\n if (actionType === 'AuthenticationController:getBearerToken') {\n return mockAuthGetBearerToken();\n }\n\n if (actionType === 'AuthenticationController:getSessionProfile') {\n return mockAuthGetSessionProfile();\n }\n\n if (actionType === 'AuthenticationController:performSignIn') {\n return mockAuthPerformSignIn();\n }\n\n if (actionType === 'AuthenticationController:isSignedIn') {\n return mockAuthIsSignedIn();\n }\n\n if (actionType === 'AuthenticationController:performSignOut') {\n return mockAuthPerformSignOut();\n }\n\n if (actionType === 'KeyringController:getState') {\n return { isUnlocked: true };\n }\n\n if (actionType === 'KeyringController:withKeyring') {\n const [, ...params] = typedArgs;\n return mockKeyringWithKeyring(...params);\n }\n\n if (actionType === 'AccountsController:listAccounts') {\n return mockAccountsListAccounts();\n }\n\n if (typedArgs[0] === 'AccountsController:updateAccountMetadata') {\n const [, ...params] = typedArgs;\n return mockAccountsUpdateAccountMetadata(...params);\n }\n\n if (actionType === 'NetworkController:getState') {\n return mockNetworkControllerGetState();\n }\n\n if (actionType === 'NetworkController:addNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerAddNetwork(...params);\n }\n\n if (actionType === 'NetworkController:removeNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerRemoveNetwork(...params);\n }\n\n if (actionType === 'NetworkController:updateNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerUpdateNetwork(...params);\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported messenger call: ${actionType as string}`,\n );\n });\n\n return {\n baseMessenger,\n messenger,\n mockSnapGetPublicKey,\n mockSnapSignMessage,\n mockAuthGetBearerToken,\n mockAuthGetSessionProfile,\n mockAuthPerformSignIn,\n mockAuthIsSignedIn,\n mockAuthPerformSignOut,\n mockKeyringWithKeyring,\n mockAccountsUpdateAccountMetadata,\n mockAccountsListAccounts,\n mockNetworkControllerGetState,\n mockNetworkControllerAddNetwork,\n mockNetworkControllerRemoveNetwork,\n mockNetworkControllerUpdateNetwork,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mockMessenger.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NotNamespacedBy } from '@metamask/base-controller';\nimport { Messenger } from '@metamask/base-controller';\nimport type { EthKeyring } from '@metamask/keyring-internal-api';\n\nimport { MOCK_STORAGE_KEY_SIGNATURE } from '.';\nimport type {\n AllowedActions,\n AllowedEvents,\n UserStorageControllerMessenger,\n} from '..';\n\ntype GetHandler<ActionType extends AllowedActions['type']> = Extract<\n AllowedActions,\n { type: ActionType }\n>['handler'];\n\ntype CallParams = {\n [K in AllowedActions['type']]: [\n K,\n ...Parameters<Extract<AllowedActions, { type: K }>['handler']>,\n ];\n}[AllowedActions['type']];\n\nconst typedMockFn = <\n ActionType extends AllowedActions['type'],\n Handler = GetHandler<ActionType>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Func extends (...args: any) => any = Handler extends (...args: any[]) => any\n ? Handler\n : never,\n>(\n _type: ActionType,\n) => jest.fn<ReturnType<Func>, Parameters<Func>>();\n\ntype ExternalEvents = NotNamespacedBy<\n 'UserStorageController',\n AllowedEvents['type']\n>;\n\n/**\n * creates a custom user storage messenger, in case tests need different permissions\n *\n * @param props - overrides\n * @param props.overrideEvents - override events\n * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls\n */\nexport function createCustomUserStorageMessenger(props?: {\n overrideEvents?: ExternalEvents[];\n}) {\n const baseMessenger = new Messenger<AllowedActions, AllowedEvents>();\n const messenger = baseMessenger.getRestricted({\n name: 'UserStorageController',\n allowedActions: [\n 'KeyringController:getState',\n 'KeyringController:withKeyring',\n 'SnapController:handleRequest',\n 'AuthenticationController:getBearerToken',\n 'AuthenticationController:getSessionProfile',\n 'AuthenticationController:isSignedIn',\n 'AuthenticationController:performSignOut',\n 'AuthenticationController:performSignIn',\n 'AccountsController:listAccounts',\n 'AccountsController:updateAccountMetadata',\n 'NetworkController:getState',\n 'NetworkController:addNetwork',\n 'NetworkController:updateNetwork',\n 'NetworkController:removeNetwork',\n ],\n allowedEvents: props?.overrideEvents ?? [\n 'KeyringController:lock',\n 'KeyringController:unlock',\n 'AccountsController:accountAdded',\n 'AccountsController:accountRenamed',\n 'NetworkController:networkRemoved',\n ],\n });\n\n return {\n baseMessenger,\n messenger,\n };\n}\n\ntype OverrideMessengers = {\n baseMessenger: Messenger<AllowedActions, AllowedEvents>;\n messenger: UserStorageControllerMessenger;\n};\n\n/**\n * Jest Mock Utility to generate a mock User Storage Messenger\n *\n * @param overrideMessengers - override messengers if need to modify the underlying permissions\n * @returns series of mocks to actions that can be called\n */\nexport function mockUserStorageMessenger(\n overrideMessengers?: OverrideMessengers,\n) {\n const { baseMessenger, messenger } =\n overrideMessengers ?? createCustomUserStorageMessenger();\n\n const mockSnapGetPublicKey = jest.fn().mockResolvedValue('MOCK_PUBLIC_KEY');\n const mockSnapSignMessage = jest\n .fn()\n .mockResolvedValue(MOCK_STORAGE_KEY_SIGNATURE);\n\n const mockAuthGetBearerToken = typedMockFn(\n 'AuthenticationController:getBearerToken',\n ).mockResolvedValue('MOCK_BEARER_TOKEN');\n\n const mockAuthGetSessionProfile = typedMockFn(\n 'AuthenticationController:getSessionProfile',\n ).mockResolvedValue({\n identifierId: '',\n profileId: 'MOCK_PROFILE_ID',\n });\n\n const mockAuthPerformSignIn = typedMockFn(\n 'AuthenticationController:performSignIn',\n ).mockResolvedValue('New Access Token');\n\n const mockAuthIsSignedIn = typedMockFn(\n 'AuthenticationController:isSignedIn',\n ).mockReturnValue(true);\n\n const mockAuthPerformSignOut = typedMockFn(\n 'AuthenticationController:performSignOut',\n );\n\n const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');\n\n const mockAccountsListAccounts = jest.fn();\n\n const mockKeyringGetAccounts = jest.fn();\n const mockKeyringAddAccounts = jest.fn();\n\n const mockAccountsUpdateAccountMetadata = typedMockFn(\n 'AccountsController:updateAccountMetadata',\n ).mockResolvedValue(true as never);\n\n const mockNetworkControllerGetState = typedMockFn(\n 'NetworkController:getState',\n ).mockReturnValue({\n selectedNetworkClientId: '',\n networksMetadata: {},\n networkConfigurationsByChainId: {},\n });\n\n const mockNetworkControllerAddNetwork = typedMockFn(\n 'NetworkController:addNetwork',\n );\n\n const mockNetworkControllerRemoveNetwork = typedMockFn(\n 'NetworkController:removeNetwork',\n );\n\n const mockNetworkControllerUpdateNetwork = typedMockFn(\n 'NetworkController:updateNetwork',\n );\n\n jest.spyOn(messenger, 'call').mockImplementation((...args) => {\n const typedArgs = args as unknown as CallParams;\n const [actionType] = typedArgs;\n\n if (actionType === 'SnapController:handleRequest') {\n const [, params] = typedArgs;\n if (params.request.method === 'getPublicKey') {\n return mockSnapGetPublicKey();\n }\n\n if (params.request.method === 'signMessage') {\n return mockSnapSignMessage();\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported SnapController:handleRequest call: ${\n params.request.method as string\n }`,\n );\n }\n\n if (actionType === 'AuthenticationController:getBearerToken') {\n return mockAuthGetBearerToken();\n }\n\n if (actionType === 'AuthenticationController:getSessionProfile') {\n return mockAuthGetSessionProfile();\n }\n\n if (actionType === 'AuthenticationController:performSignIn') {\n return mockAuthPerformSignIn();\n }\n\n if (actionType === 'AuthenticationController:isSignedIn') {\n return mockAuthIsSignedIn();\n }\n\n if (actionType === 'AuthenticationController:performSignOut') {\n return mockAuthPerformSignOut();\n }\n\n if (actionType === 'KeyringController:getState') {\n return { isUnlocked: true };\n }\n\n if (actionType === 'KeyringController:withKeyring') {\n const [, ...params] = typedArgs;\n const [, operation] = params;\n\n const keyring = {\n getAccounts: mockKeyringGetAccounts,\n addAccounts: mockKeyringAddAccounts,\n } as unknown as EthKeyring<never>;\n\n return operation(keyring);\n }\n\n if (actionType === 'AccountsController:listAccounts') {\n return mockAccountsListAccounts();\n }\n\n if (typedArgs[0] === 'AccountsController:updateAccountMetadata') {\n const [, ...params] = typedArgs;\n return mockAccountsUpdateAccountMetadata(...params);\n }\n\n if (actionType === 'NetworkController:getState') {\n return mockNetworkControllerGetState();\n }\n\n if (actionType === 'NetworkController:addNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerAddNetwork(...params);\n }\n\n if (actionType === 'NetworkController:removeNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerRemoveNetwork(...params);\n }\n\n if (actionType === 'NetworkController:updateNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerUpdateNetwork(...params);\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported messenger call: ${actionType as string}`,\n );\n });\n\n return {\n baseMessenger,\n messenger,\n mockSnapGetPublicKey,\n mockSnapSignMessage,\n mockAuthGetBearerToken,\n mockAuthGetSessionProfile,\n mockAuthPerformSignIn,\n mockAuthIsSignedIn,\n mockAuthPerformSignOut,\n mockKeyringGetAccounts,\n mockKeyringAddAccounts,\n mockKeyringWithKeyring,\n mockAccountsUpdateAccountMetadata,\n mockAccountsListAccounts,\n mockNetworkControllerGetState,\n mockNetworkControllerAddNetwork,\n mockNetworkControllerRemoveNetwork,\n mockNetworkControllerUpdateNetwork,\n };\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="jest" />
|
|
2
2
|
import type { NotNamespacedBy } from "@metamask/base-controller";
|
|
3
3
|
import { Messenger } from "@metamask/base-controller";
|
|
4
|
+
import type { EthKeyring } from "@metamask/keyring-internal-api";
|
|
4
5
|
import type { AllowedActions, AllowedEvents, UserStorageControllerMessenger } from "../index.cjs";
|
|
5
6
|
type ExternalEvents = NotNamespacedBy<'UserStorageController', AllowedEvents['type']>;
|
|
6
7
|
/**
|
|
@@ -32,7 +33,7 @@ export declare function createCustomUserStorageMessenger(props?: {
|
|
|
32
33
|
identifierId: string;
|
|
33
34
|
profileId: string;
|
|
34
35
|
}>;
|
|
35
|
-
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.cjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
36
|
+
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/keyring-controller").KeyringControllerWithKeyringAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.cjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "KeyringController:withKeyring" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
36
37
|
};
|
|
37
38
|
type OverrideMessengers = {
|
|
38
39
|
baseMessenger: Messenger<AllowedActions, AllowedEvents>;
|
|
@@ -64,7 +65,7 @@ export declare function mockUserStorageMessenger(overrideMessengers?: OverrideMe
|
|
|
64
65
|
identifierId: string;
|
|
65
66
|
profileId: string;
|
|
66
67
|
}>;
|
|
67
|
-
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.cjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
68
|
+
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/keyring-controller").KeyringControllerWithKeyringAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.cjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "KeyringController:withKeyring" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
68
69
|
mockSnapGetPublicKey: jest.Mock<any, any>;
|
|
69
70
|
mockSnapSignMessage: jest.Mock<any, any>;
|
|
70
71
|
mockAuthGetBearerToken: jest.Mock<Promise<string>, []>;
|
|
@@ -75,7 +76,9 @@ export declare function mockUserStorageMessenger(overrideMessengers?: OverrideMe
|
|
|
75
76
|
mockAuthPerformSignIn: jest.Mock<Promise<string>, []>;
|
|
76
77
|
mockAuthIsSignedIn: jest.Mock<boolean, []>;
|
|
77
78
|
mockAuthPerformSignOut: jest.Mock<void, []>;
|
|
78
|
-
|
|
79
|
+
mockKeyringGetAccounts: jest.Mock<any, any>;
|
|
80
|
+
mockKeyringAddAccounts: jest.Mock<any, any>;
|
|
81
|
+
mockKeyringWithKeyring: jest.Mock<Promise<unknown>, [selector: import("@metamask/keyring-controller").KeyringSelector, operation: (keyring: EthKeyring<import("@metamask/utils").Json>) => Promise<unknown>]>;
|
|
79
82
|
mockAccountsUpdateAccountMetadata: jest.Mock<void, [accountId: string, metadata: Partial<{
|
|
80
83
|
name: string;
|
|
81
84
|
importTime: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockMessenger.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kCAAkC;AACjE,OAAO,EAAE,SAAS,EAAE,kCAAkC;
|
|
1
|
+
{"version":3,"file":"mockMessenger.d.cts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kCAAkC;AACjE,OAAO,EAAE,SAAS,EAAE,kCAAkC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,uCAAuC;AAGjE,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,8BAA8B,EAC/B,qBAAW;AAyBZ,KAAK,cAAc,GAAG,eAAe,CACnC,uBAAuB,EACvB,aAAa,CAAC,MAAM,CAAC,CACtB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,CAAC,EAAE;IACvD,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;CACnC;;;;;;;;;;;;;;;;;;;;;EAiCA;AAED,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IACxD,SAAS,EAAE,8BAA8B,CAAC;CAC3C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,kBAAkB,CAAC,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8KxC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="jest" />
|
|
2
2
|
import type { NotNamespacedBy } from "@metamask/base-controller";
|
|
3
3
|
import { Messenger } from "@metamask/base-controller";
|
|
4
|
+
import type { EthKeyring } from "@metamask/keyring-internal-api";
|
|
4
5
|
import type { AllowedActions, AllowedEvents, UserStorageControllerMessenger } from "../index.mjs";
|
|
5
6
|
type ExternalEvents = NotNamespacedBy<'UserStorageController', AllowedEvents['type']>;
|
|
6
7
|
/**
|
|
@@ -32,7 +33,7 @@ export declare function createCustomUserStorageMessenger(props?: {
|
|
|
32
33
|
identifierId: string;
|
|
33
34
|
profileId: string;
|
|
34
35
|
}>;
|
|
35
|
-
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.mjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
36
|
+
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/keyring-controller").KeyringControllerWithKeyringAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.mjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "KeyringController:withKeyring" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
36
37
|
};
|
|
37
38
|
type OverrideMessengers = {
|
|
38
39
|
baseMessenger: Messenger<AllowedActions, AllowedEvents>;
|
|
@@ -64,7 +65,7 @@ export declare function mockUserStorageMessenger(overrideMessengers?: OverrideMe
|
|
|
64
65
|
identifierId: string;
|
|
65
66
|
profileId: string;
|
|
66
67
|
}>;
|
|
67
|
-
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.mjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
68
|
+
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/keyring-controller").KeyringControllerWithKeyringAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../index.mjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "KeyringController:withKeyring" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
68
69
|
mockSnapGetPublicKey: jest.Mock<any, any>;
|
|
69
70
|
mockSnapSignMessage: jest.Mock<any, any>;
|
|
70
71
|
mockAuthGetBearerToken: jest.Mock<Promise<string>, []>;
|
|
@@ -75,7 +76,9 @@ export declare function mockUserStorageMessenger(overrideMessengers?: OverrideMe
|
|
|
75
76
|
mockAuthPerformSignIn: jest.Mock<Promise<string>, []>;
|
|
76
77
|
mockAuthIsSignedIn: jest.Mock<boolean, []>;
|
|
77
78
|
mockAuthPerformSignOut: jest.Mock<void, []>;
|
|
78
|
-
|
|
79
|
+
mockKeyringGetAccounts: jest.Mock<any, any>;
|
|
80
|
+
mockKeyringAddAccounts: jest.Mock<any, any>;
|
|
81
|
+
mockKeyringWithKeyring: jest.Mock<Promise<unknown>, [selector: import("@metamask/keyring-controller").KeyringSelector, operation: (keyring: EthKeyring<import("@metamask/utils").Json>) => Promise<unknown>]>;
|
|
79
82
|
mockAccountsUpdateAccountMetadata: jest.Mock<void, [accountId: string, metadata: Partial<{
|
|
80
83
|
name: string;
|
|
81
84
|
importTime: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockMessenger.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kCAAkC;AACjE,OAAO,EAAE,SAAS,EAAE,kCAAkC;
|
|
1
|
+
{"version":3,"file":"mockMessenger.d.mts","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kCAAkC;AACjE,OAAO,EAAE,SAAS,EAAE,kCAAkC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,uCAAuC;AAGjE,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,8BAA8B,EAC/B,qBAAW;AAyBZ,KAAK,cAAc,GAAG,eAAe,CACnC,uBAAuB,EACvB,aAAa,CAAC,MAAM,CAAC,CACtB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,KAAK,CAAC,EAAE;IACvD,cAAc,CAAC,EAAE,cAAc,EAAE,CAAC;CACnC;;;;;;;;;;;;;;;;;;;;;EAiCA;AAED,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IACxD,SAAS,EAAE,8BAA8B,CAAC;CAC3C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,kBAAkB,CAAC,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8KxC"}
|
|
@@ -14,6 +14,7 @@ export function createCustomUserStorageMessenger(props) {
|
|
|
14
14
|
name: 'UserStorageController',
|
|
15
15
|
allowedActions: [
|
|
16
16
|
'KeyringController:getState',
|
|
17
|
+
'KeyringController:withKeyring',
|
|
17
18
|
'SnapController:handleRequest',
|
|
18
19
|
'AuthenticationController:getBearerToken',
|
|
19
20
|
'AuthenticationController:getSessionProfile',
|
|
@@ -61,9 +62,9 @@ export function mockUserStorageMessenger(overrideMessengers) {
|
|
|
61
62
|
const mockAuthIsSignedIn = typedMockFn('AuthenticationController:isSignedIn').mockReturnValue(true);
|
|
62
63
|
const mockAuthPerformSignOut = typedMockFn('AuthenticationController:performSignOut');
|
|
63
64
|
const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');
|
|
64
|
-
// Untyped mock as there is a TS(2742) issue.
|
|
65
|
-
// This will return `InternalAccount[]`
|
|
66
65
|
const mockAccountsListAccounts = jest.fn();
|
|
66
|
+
const mockKeyringGetAccounts = jest.fn();
|
|
67
|
+
const mockKeyringAddAccounts = jest.fn();
|
|
67
68
|
const mockAccountsUpdateAccountMetadata = typedMockFn('AccountsController:updateAccountMetadata').mockResolvedValue(true);
|
|
68
69
|
const mockNetworkControllerGetState = typedMockFn('NetworkController:getState').mockReturnValue({
|
|
69
70
|
selectedNetworkClientId: '',
|
|
@@ -106,7 +107,12 @@ export function mockUserStorageMessenger(overrideMessengers) {
|
|
|
106
107
|
}
|
|
107
108
|
if (actionType === 'KeyringController:withKeyring') {
|
|
108
109
|
const [, ...params] = typedArgs;
|
|
109
|
-
|
|
110
|
+
const [, operation] = params;
|
|
111
|
+
const keyring = {
|
|
112
|
+
getAccounts: mockKeyringGetAccounts,
|
|
113
|
+
addAccounts: mockKeyringAddAccounts,
|
|
114
|
+
};
|
|
115
|
+
return operation(keyring);
|
|
110
116
|
}
|
|
111
117
|
if (actionType === 'AccountsController:listAccounts') {
|
|
112
118
|
return mockAccountsListAccounts();
|
|
@@ -142,6 +148,8 @@ export function mockUserStorageMessenger(overrideMessengers) {
|
|
|
142
148
|
mockAuthPerformSignIn,
|
|
143
149
|
mockAuthIsSignedIn,
|
|
144
150
|
mockAuthPerformSignOut,
|
|
151
|
+
mockKeyringGetAccounts,
|
|
152
|
+
mockKeyringAddAccounts,
|
|
145
153
|
mockKeyringWithKeyring,
|
|
146
154
|
mockAccountsUpdateAccountMetadata,
|
|
147
155
|
mockAccountsListAccounts,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockMessenger.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NotNamespacedBy } from '@metamask/base-controller';\nimport { Messenger } from '@metamask/base-controller';\n\nimport { MOCK_STORAGE_KEY_SIGNATURE } from '.';\nimport type {\n AllowedActions,\n AllowedEvents,\n UserStorageControllerMessenger,\n} from '..';\n\ntype GetHandler<ActionType extends AllowedActions['type']> = Extract<\n AllowedActions,\n { type: ActionType }\n>['handler'];\n\ntype CallParams = {\n [K in AllowedActions['type']]: [\n K,\n ...Parameters<Extract<AllowedActions, { type: K }>['handler']>,\n ];\n}[AllowedActions['type']];\n\nconst typedMockFn = <\n ActionType extends AllowedActions['type'],\n Handler = GetHandler<ActionType>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Func extends (...args: any) => any = Handler extends (...args: any[]) => any\n ? Handler\n : never,\n>(\n _type: ActionType,\n) => jest.fn<ReturnType<Func>, Parameters<Func>>();\n\ntype ExternalEvents = NotNamespacedBy<\n 'UserStorageController',\n AllowedEvents['type']\n>;\n\n/**\n * creates a custom user storage messenger, in case tests need different permissions\n *\n * @param props - overrides\n * @param props.overrideEvents - override events\n * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls\n */\nexport function createCustomUserStorageMessenger(props?: {\n overrideEvents?: ExternalEvents[];\n}) {\n const baseMessenger = new Messenger<AllowedActions, AllowedEvents>();\n const messenger = baseMessenger.getRestricted({\n name: 'UserStorageController',\n allowedActions: [\n 'KeyringController:getState',\n 'SnapController:handleRequest',\n 'AuthenticationController:getBearerToken',\n 'AuthenticationController:getSessionProfile',\n 'AuthenticationController:isSignedIn',\n 'AuthenticationController:performSignOut',\n 'AuthenticationController:performSignIn',\n 'AccountsController:listAccounts',\n 'AccountsController:updateAccountMetadata',\n 'NetworkController:getState',\n 'NetworkController:addNetwork',\n 'NetworkController:updateNetwork',\n 'NetworkController:removeNetwork',\n ],\n allowedEvents: props?.overrideEvents ?? [\n 'KeyringController:lock',\n 'KeyringController:unlock',\n 'AccountsController:accountAdded',\n 'AccountsController:accountRenamed',\n 'NetworkController:networkRemoved',\n ],\n });\n\n return {\n baseMessenger,\n messenger,\n };\n}\n\ntype OverrideMessengers = {\n baseMessenger: Messenger<AllowedActions, AllowedEvents>;\n messenger: UserStorageControllerMessenger;\n};\n\n/**\n * Jest Mock Utility to generate a mock User Storage Messenger\n *\n * @param overrideMessengers - override messengers if need to modify the underlying permissions\n * @returns series of mocks to actions that can be called\n */\nexport function mockUserStorageMessenger(\n overrideMessengers?: OverrideMessengers,\n) {\n const { baseMessenger, messenger } =\n overrideMessengers ?? createCustomUserStorageMessenger();\n\n const mockSnapGetPublicKey = jest.fn().mockResolvedValue('MOCK_PUBLIC_KEY');\n const mockSnapSignMessage = jest\n .fn()\n .mockResolvedValue(MOCK_STORAGE_KEY_SIGNATURE);\n\n const mockAuthGetBearerToken = typedMockFn(\n 'AuthenticationController:getBearerToken',\n ).mockResolvedValue('MOCK_BEARER_TOKEN');\n\n const mockAuthGetSessionProfile = typedMockFn(\n 'AuthenticationController:getSessionProfile',\n ).mockResolvedValue({\n identifierId: '',\n profileId: 'MOCK_PROFILE_ID',\n });\n\n const mockAuthPerformSignIn = typedMockFn(\n 'AuthenticationController:performSignIn',\n ).mockResolvedValue('New Access Token');\n\n const mockAuthIsSignedIn = typedMockFn(\n 'AuthenticationController:isSignedIn',\n ).mockReturnValue(true);\n\n const mockAuthPerformSignOut = typedMockFn(\n 'AuthenticationController:performSignOut',\n );\n\n const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');\n\n // Untyped mock as there is a TS(2742) issue.\n // This will return `InternalAccount[]`\n const mockAccountsListAccounts = jest.fn();\n\n const mockAccountsUpdateAccountMetadata = typedMockFn(\n 'AccountsController:updateAccountMetadata',\n ).mockResolvedValue(true as never);\n\n const mockNetworkControllerGetState = typedMockFn(\n 'NetworkController:getState',\n ).mockReturnValue({\n selectedNetworkClientId: '',\n networksMetadata: {},\n networkConfigurationsByChainId: {},\n });\n\n const mockNetworkControllerAddNetwork = typedMockFn(\n 'NetworkController:addNetwork',\n );\n\n const mockNetworkControllerRemoveNetwork = typedMockFn(\n 'NetworkController:removeNetwork',\n );\n\n const mockNetworkControllerUpdateNetwork = typedMockFn(\n 'NetworkController:updateNetwork',\n );\n\n jest.spyOn(messenger, 'call').mockImplementation((...args) => {\n const typedArgs = args as unknown as CallParams;\n const [actionType] = typedArgs;\n\n if (actionType === 'SnapController:handleRequest') {\n const [, params] = typedArgs;\n if (params.request.method === 'getPublicKey') {\n return mockSnapGetPublicKey();\n }\n\n if (params.request.method === 'signMessage') {\n return mockSnapSignMessage();\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported SnapController:handleRequest call: ${\n params.request.method as string\n }`,\n );\n }\n\n if (actionType === 'AuthenticationController:getBearerToken') {\n return mockAuthGetBearerToken();\n }\n\n if (actionType === 'AuthenticationController:getSessionProfile') {\n return mockAuthGetSessionProfile();\n }\n\n if (actionType === 'AuthenticationController:performSignIn') {\n return mockAuthPerformSignIn();\n }\n\n if (actionType === 'AuthenticationController:isSignedIn') {\n return mockAuthIsSignedIn();\n }\n\n if (actionType === 'AuthenticationController:performSignOut') {\n return mockAuthPerformSignOut();\n }\n\n if (actionType === 'KeyringController:getState') {\n return { isUnlocked: true };\n }\n\n if (actionType === 'KeyringController:withKeyring') {\n const [, ...params] = typedArgs;\n return mockKeyringWithKeyring(...params);\n }\n\n if (actionType === 'AccountsController:listAccounts') {\n return mockAccountsListAccounts();\n }\n\n if (typedArgs[0] === 'AccountsController:updateAccountMetadata') {\n const [, ...params] = typedArgs;\n return mockAccountsUpdateAccountMetadata(...params);\n }\n\n if (actionType === 'NetworkController:getState') {\n return mockNetworkControllerGetState();\n }\n\n if (actionType === 'NetworkController:addNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerAddNetwork(...params);\n }\n\n if (actionType === 'NetworkController:removeNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerRemoveNetwork(...params);\n }\n\n if (actionType === 'NetworkController:updateNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerUpdateNetwork(...params);\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported messenger call: ${actionType as string}`,\n );\n });\n\n return {\n baseMessenger,\n messenger,\n mockSnapGetPublicKey,\n mockSnapSignMessage,\n mockAuthGetBearerToken,\n mockAuthGetSessionProfile,\n mockAuthPerformSignIn,\n mockAuthIsSignedIn,\n mockAuthPerformSignOut,\n mockKeyringWithKeyring,\n mockAccountsUpdateAccountMetadata,\n mockAccountsListAccounts,\n mockNetworkControllerGetState,\n mockNetworkControllerAddNetwork,\n mockNetworkControllerRemoveNetwork,\n mockNetworkControllerUpdateNetwork,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"mockMessenger.mjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockMessenger.ts"],"names":[],"mappings":"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","sourcesContent":["import type { NotNamespacedBy } from '@metamask/base-controller';\nimport { Messenger } from '@metamask/base-controller';\nimport type { EthKeyring } from '@metamask/keyring-internal-api';\n\nimport { MOCK_STORAGE_KEY_SIGNATURE } from '.';\nimport type {\n AllowedActions,\n AllowedEvents,\n UserStorageControllerMessenger,\n} from '..';\n\ntype GetHandler<ActionType extends AllowedActions['type']> = Extract<\n AllowedActions,\n { type: ActionType }\n>['handler'];\n\ntype CallParams = {\n [K in AllowedActions['type']]: [\n K,\n ...Parameters<Extract<AllowedActions, { type: K }>['handler']>,\n ];\n}[AllowedActions['type']];\n\nconst typedMockFn = <\n ActionType extends AllowedActions['type'],\n Handler = GetHandler<ActionType>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n Func extends (...args: any) => any = Handler extends (...args: any[]) => any\n ? Handler\n : never,\n>(\n _type: ActionType,\n) => jest.fn<ReturnType<Func>, Parameters<Func>>();\n\ntype ExternalEvents = NotNamespacedBy<\n 'UserStorageController',\n AllowedEvents['type']\n>;\n\n/**\n * creates a custom user storage messenger, in case tests need different permissions\n *\n * @param props - overrides\n * @param props.overrideEvents - override events\n * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls\n */\nexport function createCustomUserStorageMessenger(props?: {\n overrideEvents?: ExternalEvents[];\n}) {\n const baseMessenger = new Messenger<AllowedActions, AllowedEvents>();\n const messenger = baseMessenger.getRestricted({\n name: 'UserStorageController',\n allowedActions: [\n 'KeyringController:getState',\n 'KeyringController:withKeyring',\n 'SnapController:handleRequest',\n 'AuthenticationController:getBearerToken',\n 'AuthenticationController:getSessionProfile',\n 'AuthenticationController:isSignedIn',\n 'AuthenticationController:performSignOut',\n 'AuthenticationController:performSignIn',\n 'AccountsController:listAccounts',\n 'AccountsController:updateAccountMetadata',\n 'NetworkController:getState',\n 'NetworkController:addNetwork',\n 'NetworkController:updateNetwork',\n 'NetworkController:removeNetwork',\n ],\n allowedEvents: props?.overrideEvents ?? [\n 'KeyringController:lock',\n 'KeyringController:unlock',\n 'AccountsController:accountAdded',\n 'AccountsController:accountRenamed',\n 'NetworkController:networkRemoved',\n ],\n });\n\n return {\n baseMessenger,\n messenger,\n };\n}\n\ntype OverrideMessengers = {\n baseMessenger: Messenger<AllowedActions, AllowedEvents>;\n messenger: UserStorageControllerMessenger;\n};\n\n/**\n * Jest Mock Utility to generate a mock User Storage Messenger\n *\n * @param overrideMessengers - override messengers if need to modify the underlying permissions\n * @returns series of mocks to actions that can be called\n */\nexport function mockUserStorageMessenger(\n overrideMessengers?: OverrideMessengers,\n) {\n const { baseMessenger, messenger } =\n overrideMessengers ?? createCustomUserStorageMessenger();\n\n const mockSnapGetPublicKey = jest.fn().mockResolvedValue('MOCK_PUBLIC_KEY');\n const mockSnapSignMessage = jest\n .fn()\n .mockResolvedValue(MOCK_STORAGE_KEY_SIGNATURE);\n\n const mockAuthGetBearerToken = typedMockFn(\n 'AuthenticationController:getBearerToken',\n ).mockResolvedValue('MOCK_BEARER_TOKEN');\n\n const mockAuthGetSessionProfile = typedMockFn(\n 'AuthenticationController:getSessionProfile',\n ).mockResolvedValue({\n identifierId: '',\n profileId: 'MOCK_PROFILE_ID',\n });\n\n const mockAuthPerformSignIn = typedMockFn(\n 'AuthenticationController:performSignIn',\n ).mockResolvedValue('New Access Token');\n\n const mockAuthIsSignedIn = typedMockFn(\n 'AuthenticationController:isSignedIn',\n ).mockReturnValue(true);\n\n const mockAuthPerformSignOut = typedMockFn(\n 'AuthenticationController:performSignOut',\n );\n\n const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');\n\n const mockAccountsListAccounts = jest.fn();\n\n const mockKeyringGetAccounts = jest.fn();\n const mockKeyringAddAccounts = jest.fn();\n\n const mockAccountsUpdateAccountMetadata = typedMockFn(\n 'AccountsController:updateAccountMetadata',\n ).mockResolvedValue(true as never);\n\n const mockNetworkControllerGetState = typedMockFn(\n 'NetworkController:getState',\n ).mockReturnValue({\n selectedNetworkClientId: '',\n networksMetadata: {},\n networkConfigurationsByChainId: {},\n });\n\n const mockNetworkControllerAddNetwork = typedMockFn(\n 'NetworkController:addNetwork',\n );\n\n const mockNetworkControllerRemoveNetwork = typedMockFn(\n 'NetworkController:removeNetwork',\n );\n\n const mockNetworkControllerUpdateNetwork = typedMockFn(\n 'NetworkController:updateNetwork',\n );\n\n jest.spyOn(messenger, 'call').mockImplementation((...args) => {\n const typedArgs = args as unknown as CallParams;\n const [actionType] = typedArgs;\n\n if (actionType === 'SnapController:handleRequest') {\n const [, params] = typedArgs;\n if (params.request.method === 'getPublicKey') {\n return mockSnapGetPublicKey();\n }\n\n if (params.request.method === 'signMessage') {\n return mockSnapSignMessage();\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported SnapController:handleRequest call: ${\n params.request.method as string\n }`,\n );\n }\n\n if (actionType === 'AuthenticationController:getBearerToken') {\n return mockAuthGetBearerToken();\n }\n\n if (actionType === 'AuthenticationController:getSessionProfile') {\n return mockAuthGetSessionProfile();\n }\n\n if (actionType === 'AuthenticationController:performSignIn') {\n return mockAuthPerformSignIn();\n }\n\n if (actionType === 'AuthenticationController:isSignedIn') {\n return mockAuthIsSignedIn();\n }\n\n if (actionType === 'AuthenticationController:performSignOut') {\n return mockAuthPerformSignOut();\n }\n\n if (actionType === 'KeyringController:getState') {\n return { isUnlocked: true };\n }\n\n if (actionType === 'KeyringController:withKeyring') {\n const [, ...params] = typedArgs;\n const [, operation] = params;\n\n const keyring = {\n getAccounts: mockKeyringGetAccounts,\n addAccounts: mockKeyringAddAccounts,\n } as unknown as EthKeyring<never>;\n\n return operation(keyring);\n }\n\n if (actionType === 'AccountsController:listAccounts') {\n return mockAccountsListAccounts();\n }\n\n if (typedArgs[0] === 'AccountsController:updateAccountMetadata') {\n const [, ...params] = typedArgs;\n return mockAccountsUpdateAccountMetadata(...params);\n }\n\n if (actionType === 'NetworkController:getState') {\n return mockNetworkControllerGetState();\n }\n\n if (actionType === 'NetworkController:addNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerAddNetwork(...params);\n }\n\n if (actionType === 'NetworkController:removeNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerRemoveNetwork(...params);\n }\n\n if (actionType === 'NetworkController:updateNetwork') {\n const [, ...params] = typedArgs;\n return mockNetworkControllerUpdateNetwork(...params);\n }\n\n throw new Error(\n `MOCK_FAIL - unsupported messenger call: ${actionType as string}`,\n );\n });\n\n return {\n baseMessenger,\n messenger,\n mockSnapGetPublicKey,\n mockSnapSignMessage,\n mockAuthGetBearerToken,\n mockAuthGetSessionProfile,\n mockAuthPerformSignIn,\n mockAuthIsSignedIn,\n mockAuthPerformSignOut,\n mockKeyringGetAccounts,\n mockKeyringAddAccounts,\n mockKeyringWithKeyring,\n mockAccountsUpdateAccountMetadata,\n mockAccountsListAccounts,\n mockNetworkControllerGetState,\n mockNetworkControllerAddNetwork,\n mockNetworkControllerRemoveNetwork,\n mockNetworkControllerUpdateNetwork,\n };\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createExpectedAccountSyncBatchDeleteBody = exports.createExpectedAccountSyncBatchUpsertBody = exports.mockUserStorageMessengerForAccountSyncing = void 0;
|
|
4
|
+
const keyring_controller_1 = require("@metamask/keyring-controller");
|
|
4
5
|
const mockAccounts_1 = require("./mockAccounts.cjs");
|
|
5
6
|
const encryption_1 = require("../../../../shared/encryption/index.cjs");
|
|
6
7
|
const mockMessenger_1 = require("../../__fixtures__/mockMessenger.cjs");
|
|
@@ -15,9 +16,14 @@ const utils_1 = require("../utils.cjs");
|
|
|
15
16
|
*/
|
|
16
17
|
function mockUserStorageMessengerForAccountSyncing(options) {
|
|
17
18
|
const messengerMocks = (0, mockMessenger_1.mockUserStorageMessenger)();
|
|
18
|
-
messengerMocks.
|
|
19
|
+
messengerMocks.mockKeyringAddAccounts.mockImplementation(async () => {
|
|
19
20
|
messengerMocks.baseMessenger.publish('AccountsController:accountAdded', mockAccounts_1.MOCK_INTERNAL_ACCOUNTS.ONE[0]);
|
|
20
|
-
|
|
21
|
+
});
|
|
22
|
+
messengerMocks.mockKeyringGetAccounts.mockImplementation(async () => {
|
|
23
|
+
return (options?.accounts?.accountsList
|
|
24
|
+
?.filter((a) => a.metadata.keyring.type === keyring_controller_1.KeyringTypes.hd)
|
|
25
|
+
.map((a) => a.address) ??
|
|
26
|
+
mockAccounts_1.MOCK_INTERNAL_ACCOUNTS.ALL.map((a) => a.address));
|
|
21
27
|
});
|
|
22
28
|
messengerMocks.mockAccountsListAccounts.mockReturnValue((options?.accounts?.accountsList ??
|
|
23
29
|
mockAccounts_1.MOCK_INTERNAL_ACCOUNTS.ALL));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.cjs","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"test-utils.cjs","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":";;;AAAA,qEAA4D;AAG5D,qDAAwD;AACxD,wEAAiE;AACjE,wEAA4E;AAC5E,wCAAkE;AAElE;;;;;;;GAOG;AACH,SAAgB,yCAAyC,CAAC,OAIzD;IACC,MAAM,cAAc,GAAG,IAAA,wCAAwB,GAAE,CAAC;IAElD,cAAc,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;QAClE,cAAc,CAAC,aAAa,CAAC,OAAO,CAClC,iCAAiC,EACjC,qCAAsB,CAAC,GAAG,CAAC,CAAC,CAAoB,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;QAClE,OAAO,CACL,OAAO,EAAE,QAAQ,EAAE,YAAY;YAC7B,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,iCAAY,CAAC,EAAE,CAAC;aAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACxB,qCAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,wBAAwB,CAAC,eAAe,CACrD,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY;QAC9B,qCAAsB,CAAC,GAAG,CAAsB,CACnD,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC;AA7BD,8FA6BC;AAED;;;;;;GAMG;AACH,SAAgB,wCAAwC,CACtD,IAAiC,EACjC,UAAkB;IAElB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;QAC1C,IAAA,6BAAgB,EAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,IAAA,8CAAsC,EAAC,UAAU,CAAC,CAAC;KACnE,CAAC,CAAC;AACL,CAAC;AARD,4FAQC;AAED;;;;;;GAMG;AACH,SAAgB,wCAAwC,CACtD,IAAc,EACd,UAAkB;IAElB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3B,IAAA,6BAAgB,EAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAChD,CAAC;AACJ,CAAC;AAPD,4FAOC","sourcesContent":["import { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { MOCK_INTERNAL_ACCOUNTS } from './mockAccounts';\nimport { createSHA256Hash } from '../../../../shared/encryption';\nimport { mockUserStorageMessenger } from '../../__fixtures__/mockMessenger';\nimport { mapInternalAccountToUserStorageAccount } from '../utils';\n\n/**\n * Test Utility - create a mock user storage messenger for account syncing tests\n *\n * @param options - options for the mock messenger\n * @param options.accounts - options for the accounts part of the controller\n * @param options.accounts.accountsList - list of accounts to return for the 'AccountsController:listAccounts' action\n * @returns Mock User Storage Messenger\n */\nexport function mockUserStorageMessengerForAccountSyncing(options?: {\n accounts?: {\n accountsList?: InternalAccount[];\n };\n}) {\n const messengerMocks = mockUserStorageMessenger();\n\n messengerMocks.mockKeyringAddAccounts.mockImplementation(async () => {\n messengerMocks.baseMessenger.publish(\n 'AccountsController:accountAdded',\n MOCK_INTERNAL_ACCOUNTS.ONE[0] as InternalAccount,\n );\n });\n\n messengerMocks.mockKeyringGetAccounts.mockImplementation(async () => {\n return (\n options?.accounts?.accountsList\n ?.filter((a) => a.metadata.keyring.type === KeyringTypes.hd)\n .map((a) => a.address) ??\n MOCK_INTERNAL_ACCOUNTS.ALL.map((a) => a.address)\n );\n });\n\n messengerMocks.mockAccountsListAccounts.mockReturnValue(\n (options?.accounts?.accountsList ??\n MOCK_INTERNAL_ACCOUNTS.ALL) as InternalAccount[],\n );\n\n return messengerMocks;\n}\n\n/**\n * Test Utility - creates a realistic expected batch upsert payload\n *\n * @param data - data supposed to be upserted\n * @param storageKey - storage key\n * @returns expected body\n */\nexport function createExpectedAccountSyncBatchUpsertBody(\n data: [string, InternalAccount][],\n storageKey: string,\n) {\n return data.map(([entryKey, entryValue]) => [\n createSHA256Hash(String(entryKey) + storageKey),\n JSON.stringify(mapInternalAccountToUserStorageAccount(entryValue)),\n ]);\n}\n\n/**\n * Test Utility - creates a realistic expected batch delete payload\n *\n * @param data - data supposed to be deleted\n * @param storageKey - storage key\n * @returns expected body\n */\nexport function createExpectedAccountSyncBatchDeleteBody(\n data: string[],\n storageKey: string,\n) {\n return data.map((entryKey) =>\n createSHA256Hash(String(entryKey) + storageKey),\n );\n}\n"]}
|
|
@@ -32,7 +32,7 @@ export declare function mockUserStorageMessengerForAccountSyncing(options?: {
|
|
|
32
32
|
identifierId: string;
|
|
33
33
|
profileId: string;
|
|
34
34
|
}>;
|
|
35
|
-
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../../index.cjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
35
|
+
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/keyring-controller").KeyringControllerWithKeyringAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../../index.cjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "KeyringController:withKeyring" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
36
36
|
mockSnapGetPublicKey: jest.Mock<any, any>;
|
|
37
37
|
mockSnapSignMessage: jest.Mock<any, any>;
|
|
38
38
|
mockAuthGetBearerToken: jest.Mock<Promise<string>, []>;
|
|
@@ -43,6 +43,8 @@ export declare function mockUserStorageMessengerForAccountSyncing(options?: {
|
|
|
43
43
|
mockAuthPerformSignIn: jest.Mock<Promise<string>, []>;
|
|
44
44
|
mockAuthIsSignedIn: jest.Mock<boolean, []>;
|
|
45
45
|
mockAuthPerformSignOut: jest.Mock<void, []>;
|
|
46
|
+
mockKeyringGetAccounts: jest.Mock<any, any>;
|
|
47
|
+
mockKeyringAddAccounts: jest.Mock<any, any>;
|
|
46
48
|
mockKeyringWithKeyring: jest.Mock<Promise<unknown>, [selector: import("@metamask/keyring-controller").KeyringSelector, operation: (keyring: import("@metamask/keyring-internal-api").EthKeyring<import("@metamask/utils").Json>) => Promise<unknown>]>;
|
|
47
49
|
mockAccountsUpdateAccountMetadata: jest.Mock<void, [accountId: string, metadata: Partial<{
|
|
48
50
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.d.cts","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"test-utils.d.cts","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAOtE;;;;;;;GAOG;AACH,wBAAgB,yCAAyC,CAAC,OAAO,CAAC,EAAE;IAClE,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;KAClC,CAAC;CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBA;AAED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,EACjC,UAAU,EAAE,MAAM,cAMnB;AAED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,EAAE,MAAM,YAKnB"}
|
|
@@ -32,7 +32,7 @@ export declare function mockUserStorageMessengerForAccountSyncing(options?: {
|
|
|
32
32
|
identifierId: string;
|
|
33
33
|
profileId: string;
|
|
34
34
|
}>;
|
|
35
|
-
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../../index.mjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
35
|
+
} | import("@metamask/keyring-controller").KeyringControllerGetStateAction | import("@metamask/accounts-controller").AccountsControllerListAccountsAction | import("@metamask/accounts-controller").AccountsControllerUpdateAccountMetadataAction | import("@metamask/keyring-controller").KeyringControllerWithKeyringAction | import("@metamask/network-controller").NetworkControllerGetStateAction | import("@metamask/network-controller").NetworkControllerAddNetworkAction | import("@metamask/network-controller").NetworkControllerRemoveNetworkAction | import("@metamask/network-controller").NetworkControllerUpdateNetworkAction, import("@metamask/keyring-controller").KeyringControllerLockEvent | import("@metamask/keyring-controller").KeyringControllerUnlockEvent | import("../../index.mjs").UserStorageControllerStateChangeEvent | import("@metamask/accounts-controller").AccountsControllerAccountAddedEvent | import("@metamask/accounts-controller").AccountsControllerAccountRenamedEvent | import("@metamask/network-controller").NetworkControllerNetworkRemovedEvent, "SnapController:handleRequest" | "KeyringController:getState" | "AuthenticationController:isSignedIn" | "AuthenticationController:performSignIn" | "AuthenticationController:performSignOut" | "AuthenticationController:getBearerToken" | "AuthenticationController:getSessionProfile" | "AccountsController:listAccounts" | "AccountsController:updateAccountMetadata" | "KeyringController:withKeyring" | "NetworkController:getState" | "NetworkController:addNetwork" | "NetworkController:removeNetwork" | "NetworkController:updateNetwork", "KeyringController:lock" | "KeyringController:unlock" | "AccountsController:accountAdded" | "AccountsController:accountRenamed" | "NetworkController:networkRemoved">;
|
|
36
36
|
mockSnapGetPublicKey: jest.Mock<any, any>;
|
|
37
37
|
mockSnapSignMessage: jest.Mock<any, any>;
|
|
38
38
|
mockAuthGetBearerToken: jest.Mock<Promise<string>, []>;
|
|
@@ -43,6 +43,8 @@ export declare function mockUserStorageMessengerForAccountSyncing(options?: {
|
|
|
43
43
|
mockAuthPerformSignIn: jest.Mock<Promise<string>, []>;
|
|
44
44
|
mockAuthIsSignedIn: jest.Mock<boolean, []>;
|
|
45
45
|
mockAuthPerformSignOut: jest.Mock<void, []>;
|
|
46
|
+
mockKeyringGetAccounts: jest.Mock<any, any>;
|
|
47
|
+
mockKeyringAddAccounts: jest.Mock<any, any>;
|
|
46
48
|
mockKeyringWithKeyring: jest.Mock<Promise<unknown>, [selector: import("@metamask/keyring-controller").KeyringSelector, operation: (keyring: import("@metamask/keyring-internal-api").EthKeyring<import("@metamask/utils").Json>) => Promise<unknown>]>;
|
|
47
49
|
mockAccountsUpdateAccountMetadata: jest.Mock<void, [accountId: string, metadata: Partial<{
|
|
48
50
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.d.mts","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"test-utils.d.mts","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAOtE;;;;;;;GAOG;AACH,wBAAgB,yCAAyC,CAAC,OAAO,CAAC,EAAE;IAClE,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,eAAe,EAAE,CAAC;KAClC,CAAC;CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBA;AAED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,EACjC,UAAU,EAAE,MAAM,cAMnB;AAED;;;;;;GAMG;AACH,wBAAgB,wCAAwC,CACtD,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,EAAE,MAAM,YAKnB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { KeyringTypes } from "@metamask/keyring-controller";
|
|
1
2
|
import { MOCK_INTERNAL_ACCOUNTS } from "./mockAccounts.mjs";
|
|
2
3
|
import { createSHA256Hash } from "../../../../shared/encryption/index.mjs";
|
|
3
4
|
import { mockUserStorageMessenger } from "../../__fixtures__/mockMessenger.mjs";
|
|
@@ -12,9 +13,14 @@ import { mapInternalAccountToUserStorageAccount } from "../utils.mjs";
|
|
|
12
13
|
*/
|
|
13
14
|
export function mockUserStorageMessengerForAccountSyncing(options) {
|
|
14
15
|
const messengerMocks = mockUserStorageMessenger();
|
|
15
|
-
messengerMocks.
|
|
16
|
+
messengerMocks.mockKeyringAddAccounts.mockImplementation(async () => {
|
|
16
17
|
messengerMocks.baseMessenger.publish('AccountsController:accountAdded', MOCK_INTERNAL_ACCOUNTS.ONE[0]);
|
|
17
|
-
|
|
18
|
+
});
|
|
19
|
+
messengerMocks.mockKeyringGetAccounts.mockImplementation(async () => {
|
|
20
|
+
return (options?.accounts?.accountsList
|
|
21
|
+
?.filter((a) => a.metadata.keyring.type === KeyringTypes.hd)
|
|
22
|
+
.map((a) => a.address) ??
|
|
23
|
+
MOCK_INTERNAL_ACCOUNTS.ALL.map((a) => a.address));
|
|
18
24
|
});
|
|
19
25
|
messengerMocks.mockAccountsListAccounts.mockReturnValue((options?.accounts?.accountsList ??
|
|
20
26
|
MOCK_INTERNAL_ACCOUNTS.ALL));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.mjs","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-utils.mjs","sourceRoot":"","sources":["../../../../../src/controllers/user-storage/account-syncing/__fixtures__/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAG5D,OAAO,EAAE,sBAAsB,EAAE,2BAAuB;AACxD,OAAO,EAAE,gBAAgB,EAAE,gDAAsC;AACjE,OAAO,EAAE,wBAAwB,EAAE,6CAAyC;AAC5E,OAAO,EAAE,sCAAsC,EAAE,qBAAiB;AAElE;;;;;;;GAOG;AACH,MAAM,UAAU,yCAAyC,CAAC,OAIzD;IACC,MAAM,cAAc,GAAG,wBAAwB,EAAE,CAAC;IAElD,cAAc,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;QAClE,cAAc,CAAC,aAAa,CAAC,OAAO,CAClC,iCAAiC,EACjC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAoB,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,sBAAsB,CAAC,kBAAkB,CAAC,KAAK,IAAI,EAAE;QAClE,OAAO,CACL,OAAO,EAAE,QAAQ,EAAE,YAAY;YAC7B,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,EAAE,CAAC;aAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACxB,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,wBAAwB,CAAC,eAAe,CACrD,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY;QAC9B,sBAAsB,CAAC,GAAG,CAAsB,CACnD,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wCAAwC,CACtD,IAAiC,EACjC,UAAkB;IAElB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;QAC1C,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,sCAAsC,CAAC,UAAU,CAAC,CAAC;KACnE,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,wCAAwC,CACtD,IAAc,EACd,UAAkB;IAElB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3B,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC,CAChD,CAAC;AACJ,CAAC","sourcesContent":["import { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\n\nimport { MOCK_INTERNAL_ACCOUNTS } from './mockAccounts';\nimport { createSHA256Hash } from '../../../../shared/encryption';\nimport { mockUserStorageMessenger } from '../../__fixtures__/mockMessenger';\nimport { mapInternalAccountToUserStorageAccount } from '../utils';\n\n/**\n * Test Utility - create a mock user storage messenger for account syncing tests\n *\n * @param options - options for the mock messenger\n * @param options.accounts - options for the accounts part of the controller\n * @param options.accounts.accountsList - list of accounts to return for the 'AccountsController:listAccounts' action\n * @returns Mock User Storage Messenger\n */\nexport function mockUserStorageMessengerForAccountSyncing(options?: {\n accounts?: {\n accountsList?: InternalAccount[];\n };\n}) {\n const messengerMocks = mockUserStorageMessenger();\n\n messengerMocks.mockKeyringAddAccounts.mockImplementation(async () => {\n messengerMocks.baseMessenger.publish(\n 'AccountsController:accountAdded',\n MOCK_INTERNAL_ACCOUNTS.ONE[0] as InternalAccount,\n );\n });\n\n messengerMocks.mockKeyringGetAccounts.mockImplementation(async () => {\n return (\n options?.accounts?.accountsList\n ?.filter((a) => a.metadata.keyring.type === KeyringTypes.hd)\n .map((a) => a.address) ??\n MOCK_INTERNAL_ACCOUNTS.ALL.map((a) => a.address)\n );\n });\n\n messengerMocks.mockAccountsListAccounts.mockReturnValue(\n (options?.accounts?.accountsList ??\n MOCK_INTERNAL_ACCOUNTS.ALL) as InternalAccount[],\n );\n\n return messengerMocks;\n}\n\n/**\n * Test Utility - creates a realistic expected batch upsert payload\n *\n * @param data - data supposed to be upserted\n * @param storageKey - storage key\n * @returns expected body\n */\nexport function createExpectedAccountSyncBatchUpsertBody(\n data: [string, InternalAccount][],\n storageKey: string,\n) {\n return data.map(([entryKey, entryValue]) => [\n createSHA256Hash(String(entryKey) + storageKey),\n JSON.stringify(mapInternalAccountToUserStorageAccount(entryValue)),\n ]);\n}\n\n/**\n * Test Utility - creates a realistic expected batch delete payload\n *\n * @param data - data supposed to be deleted\n * @param storageKey - storage key\n * @returns expected body\n */\nexport function createExpectedAccountSyncBatchDeleteBody(\n data: string[],\n storageKey: string,\n) {\n return data.map((entryKey) =>\n createSHA256Hash(String(entryKey) + storageKey),\n );\n}\n"]}
|
|
@@ -19,7 +19,7 @@ async function saveInternalAccountToUserStorage(internalAccount, config, options
|
|
|
19
19
|
if (!isAccountSyncingEnabled ||
|
|
20
20
|
!(0, sync_utils_1.canPerformAccountSyncing)(config, options) ||
|
|
21
21
|
!(0, keyring_api_1.isEvmAccountType)(internalAccount.type) ||
|
|
22
|
-
!(0, utils_1.
|
|
22
|
+
!(await (0, utils_1.isInternalAccountFromPrimarySRPHdKeyring)(internalAccount, options))) {
|
|
23
23
|
return;
|
|
24
24
|
}
|
|
25
25
|
try {
|
|
@@ -100,12 +100,15 @@ async function syncInternalAccountsWithUserStorage(config, options) {
|
|
|
100
100
|
const numberOfAccountsToAdd = Math.min(userStorageAccountsList.length, maxNumberOfAccountsToAdd) -
|
|
101
101
|
internalAccountsList.length;
|
|
102
102
|
// Create new accounts to match the user storage accounts list
|
|
103
|
+
// NOTE: we only support the primary SRP HD keyring for now
|
|
104
|
+
// This is why we are hardcoding the index to 0
|
|
103
105
|
await getMessenger().call('KeyringController:withKeyring', {
|
|
104
106
|
type: keyring_controller_1.KeyringTypes.hd,
|
|
107
|
+
index: 0,
|
|
105
108
|
}, async (keyring) => {
|
|
106
109
|
keyring.addAccounts(numberOfAccountsToAdd);
|
|
107
110
|
});
|
|
108
|
-
//
|
|
111
|
+
// TODO: below code is kept for analytics but should probably be re-thought
|
|
109
112
|
for (let i = 0; i < numberOfAccountsToAdd; i++) {
|
|
110
113
|
onAccountAdded?.();
|
|
111
114
|
}
|