@metamask-previews/profile-sync-controller 8.1.0-preview-dbdf1da → 8.1.1-preview-30bb9023

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.
Files changed (161) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/README.md +32 -0
  3. package/auth/mocks/package.json +2 -2
  4. package/dist/controllers/authentication/index.cjs +1 -1
  5. package/dist/controllers/authentication/index.cjs.map +1 -1
  6. package/dist/controllers/authentication/index.d.cts +1 -1
  7. package/dist/controllers/authentication/index.d.cts.map +1 -1
  8. package/dist/controllers/authentication/index.d.mts +1 -1
  9. package/dist/controllers/authentication/index.d.mts.map +1 -1
  10. package/dist/controllers/authentication/index.mjs +1 -1
  11. package/dist/controllers/authentication/index.mjs.map +1 -1
  12. package/dist/controllers/authentication/mocks/index.cjs.map +1 -0
  13. package/dist/controllers/authentication/mocks/index.d.cts.map +1 -0
  14. package/dist/controllers/authentication/mocks/index.d.mts.map +1 -0
  15. package/dist/controllers/authentication/mocks/index.mjs.map +1 -0
  16. package/dist/controllers/authentication/mocks/mockResponses.cjs.map +1 -0
  17. package/dist/controllers/authentication/mocks/mockResponses.d.cts.map +1 -0
  18. package/dist/controllers/authentication/mocks/mockResponses.d.mts.map +1 -0
  19. package/dist/controllers/authentication/mocks/mockResponses.mjs.map +1 -0
  20. package/dist/controllers/user-storage/index.cjs +1 -1
  21. package/dist/controllers/user-storage/index.cjs.map +1 -1
  22. package/dist/controllers/user-storage/index.d.cts +1 -1
  23. package/dist/controllers/user-storage/index.d.cts.map +1 -1
  24. package/dist/controllers/user-storage/index.d.mts +1 -1
  25. package/dist/controllers/user-storage/index.d.mts.map +1 -1
  26. package/dist/controllers/user-storage/index.mjs +1 -1
  27. package/dist/controllers/user-storage/index.mjs.map +1 -1
  28. package/dist/controllers/user-storage/mocks/index.cjs.map +1 -0
  29. package/dist/controllers/user-storage/mocks/index.d.cts.map +1 -0
  30. package/dist/controllers/user-storage/mocks/index.d.mts.map +1 -0
  31. package/dist/controllers/user-storage/mocks/index.mjs.map +1 -0
  32. package/dist/controllers/user-storage/mocks/mockResponses.cjs.map +1 -0
  33. package/dist/controllers/user-storage/mocks/mockResponses.d.cts.map +1 -0
  34. package/dist/controllers/user-storage/mocks/mockResponses.d.mts.map +1 -0
  35. package/dist/controllers/user-storage/mocks/mockResponses.mjs.map +1 -0
  36. package/dist/controllers/user-storage/mocks/mockStorage.cjs.map +1 -0
  37. package/dist/controllers/user-storage/mocks/mockStorage.d.cts.map +1 -0
  38. package/dist/controllers/user-storage/mocks/mockStorage.d.mts.map +1 -0
  39. package/dist/controllers/user-storage/mocks/mockStorage.mjs.map +1 -0
  40. package/package.json +11 -11
  41. package/user-storage/mocks/package.json +2 -2
  42. package/dist/controllers/authentication/__fixtures__/index.cjs.map +0 -1
  43. package/dist/controllers/authentication/__fixtures__/index.d.cts.map +0 -1
  44. package/dist/controllers/authentication/__fixtures__/index.d.mts.map +0 -1
  45. package/dist/controllers/authentication/__fixtures__/index.mjs.map +0 -1
  46. package/dist/controllers/authentication/__fixtures__/mockResponses.cjs.map +0 -1
  47. package/dist/controllers/authentication/__fixtures__/mockResponses.d.cts.map +0 -1
  48. package/dist/controllers/authentication/__fixtures__/mockResponses.d.mts.map +0 -1
  49. package/dist/controllers/authentication/__fixtures__/mockResponses.mjs.map +0 -1
  50. package/dist/controllers/authentication/__fixtures__/mockServices.cjs +0 -37
  51. package/dist/controllers/authentication/__fixtures__/mockServices.cjs.map +0 -1
  52. package/dist/controllers/authentication/__fixtures__/mockServices.d.cts +0 -10
  53. package/dist/controllers/authentication/__fixtures__/mockServices.d.cts.map +0 -1
  54. package/dist/controllers/authentication/__fixtures__/mockServices.d.mts +0 -10
  55. package/dist/controllers/authentication/__fixtures__/mockServices.d.mts.map +0 -1
  56. package/dist/controllers/authentication/__fixtures__/mockServices.mjs +0 -35
  57. package/dist/controllers/authentication/__fixtures__/mockServices.mjs.map +0 -1
  58. package/dist/controllers/user-storage/__fixtures__/index.cjs.map +0 -1
  59. package/dist/controllers/user-storage/__fixtures__/index.d.cts.map +0 -1
  60. package/dist/controllers/user-storage/__fixtures__/index.d.mts.map +0 -1
  61. package/dist/controllers/user-storage/__fixtures__/index.mjs.map +0 -1
  62. package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs +0 -167
  63. package/dist/controllers/user-storage/__fixtures__/mockMessenger.cjs.map +0 -1
  64. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts +0 -105
  65. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.cts.map +0 -1
  66. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts +0 -105
  67. package/dist/controllers/user-storage/__fixtures__/mockMessenger.d.mts.map +0 -1
  68. package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs +0 -162
  69. package/dist/controllers/user-storage/__fixtures__/mockMessenger.mjs.map +0 -1
  70. package/dist/controllers/user-storage/__fixtures__/mockResponses.cjs.map +0 -1
  71. package/dist/controllers/user-storage/__fixtures__/mockResponses.d.cts.map +0 -1
  72. package/dist/controllers/user-storage/__fixtures__/mockResponses.d.mts.map +0 -1
  73. package/dist/controllers/user-storage/__fixtures__/mockResponses.mjs.map +0 -1
  74. package/dist/controllers/user-storage/__fixtures__/mockServices.cjs +0 -82
  75. package/dist/controllers/user-storage/__fixtures__/mockServices.cjs.map +0 -1
  76. package/dist/controllers/user-storage/__fixtures__/mockServices.d.cts +0 -15
  77. package/dist/controllers/user-storage/__fixtures__/mockServices.d.cts.map +0 -1
  78. package/dist/controllers/user-storage/__fixtures__/mockServices.d.mts +0 -15
  79. package/dist/controllers/user-storage/__fixtures__/mockServices.d.mts.map +0 -1
  80. package/dist/controllers/user-storage/__fixtures__/mockServices.mjs +0 -76
  81. package/dist/controllers/user-storage/__fixtures__/mockServices.mjs.map +0 -1
  82. package/dist/controllers/user-storage/__fixtures__/mockStorage.cjs.map +0 -1
  83. package/dist/controllers/user-storage/__fixtures__/mockStorage.d.cts.map +0 -1
  84. package/dist/controllers/user-storage/__fixtures__/mockStorage.d.mts.map +0 -1
  85. package/dist/controllers/user-storage/__fixtures__/mockStorage.mjs.map +0 -1
  86. package/dist/controllers/user-storage/__fixtures__/test-utils.cjs +0 -78
  87. package/dist/controllers/user-storage/__fixtures__/test-utils.cjs.map +0 -1
  88. package/dist/controllers/user-storage/__fixtures__/test-utils.d.cts +0 -38
  89. package/dist/controllers/user-storage/__fixtures__/test-utils.d.cts.map +0 -1
  90. package/dist/controllers/user-storage/__fixtures__/test-utils.d.mts +0 -38
  91. package/dist/controllers/user-storage/__fixtures__/test-utils.d.mts.map +0 -1
  92. package/dist/controllers/user-storage/__fixtures__/test-utils.mjs +0 -68
  93. package/dist/controllers/user-storage/__fixtures__/test-utils.mjs.map +0 -1
  94. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.cjs +0 -178
  95. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.cjs.map +0 -1
  96. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.cts +0 -91
  97. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.cts.map +0 -1
  98. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.mts +0 -91
  99. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.d.mts.map +0 -1
  100. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.mjs +0 -174
  101. package/dist/controllers/user-storage/account-syncing/__fixtures__/mockAccounts.mjs.map +0 -1
  102. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.cjs +0 -58
  103. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.cjs.map +0 -1
  104. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.cts +0 -87
  105. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.cts.map +0 -1
  106. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.mts +0 -87
  107. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.d.mts.map +0 -1
  108. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.mjs +0 -52
  109. package/dist/controllers/user-storage/account-syncing/__fixtures__/test-utils.mjs.map +0 -1
  110. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.cjs +0 -43
  111. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.cjs.map +0 -1
  112. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.cts +0 -11
  113. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.cts.map +0 -1
  114. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.mts +0 -11
  115. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.d.mts.map +0 -1
  116. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.mjs +0 -36
  117. package/dist/controllers/user-storage/network-syncing/__fixtures__/mockNetwork.mjs.map +0 -1
  118. package/dist/sdk/__fixtures__/mock-auth.cjs +0 -124
  119. package/dist/sdk/__fixtures__/mock-auth.cjs.map +0 -1
  120. package/dist/sdk/__fixtures__/mock-auth.d.cts +0 -42
  121. package/dist/sdk/__fixtures__/mock-auth.d.cts.map +0 -1
  122. package/dist/sdk/__fixtures__/mock-auth.d.mts +0 -42
  123. package/dist/sdk/__fixtures__/mock-auth.d.mts.map +0 -1
  124. package/dist/sdk/__fixtures__/mock-auth.mjs +0 -119
  125. package/dist/sdk/__fixtures__/mock-auth.mjs.map +0 -1
  126. package/dist/sdk/__fixtures__/mock-userstorage.cjs +0 -111
  127. package/dist/sdk/__fixtures__/mock-userstorage.cjs.map +0 -1
  128. package/dist/sdk/__fixtures__/mock-userstorage.d.cts +0 -20
  129. package/dist/sdk/__fixtures__/mock-userstorage.d.cts.map +0 -1
  130. package/dist/sdk/__fixtures__/mock-userstorage.d.mts +0 -20
  131. package/dist/sdk/__fixtures__/mock-userstorage.d.mts.map +0 -1
  132. package/dist/sdk/__fixtures__/mock-userstorage.mjs +0 -81
  133. package/dist/sdk/__fixtures__/mock-userstorage.mjs.map +0 -1
  134. package/dist/sdk/__fixtures__/test-utils.cjs +0 -90
  135. package/dist/sdk/__fixtures__/test-utils.cjs.map +0 -1
  136. package/dist/sdk/__fixtures__/test-utils.d.cts +0 -37
  137. package/dist/sdk/__fixtures__/test-utils.d.cts.map +0 -1
  138. package/dist/sdk/__fixtures__/test-utils.d.mts +0 -37
  139. package/dist/sdk/__fixtures__/test-utils.d.mts.map +0 -1
  140. package/dist/sdk/__fixtures__/test-utils.mjs +0 -84
  141. package/dist/sdk/__fixtures__/test-utils.mjs.map +0 -1
  142. /package/dist/controllers/authentication/{__fixtures__ → mocks}/index.cjs +0 -0
  143. /package/dist/controllers/authentication/{__fixtures__ → mocks}/index.d.cts +0 -0
  144. /package/dist/controllers/authentication/{__fixtures__ → mocks}/index.d.mts +0 -0
  145. /package/dist/controllers/authentication/{__fixtures__ → mocks}/index.mjs +0 -0
  146. /package/dist/controllers/authentication/{__fixtures__ → mocks}/mockResponses.cjs +0 -0
  147. /package/dist/controllers/authentication/{__fixtures__ → mocks}/mockResponses.d.cts +0 -0
  148. /package/dist/controllers/authentication/{__fixtures__ → mocks}/mockResponses.d.mts +0 -0
  149. /package/dist/controllers/authentication/{__fixtures__ → mocks}/mockResponses.mjs +0 -0
  150. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/index.cjs +0 -0
  151. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/index.d.cts +0 -0
  152. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/index.d.mts +0 -0
  153. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/index.mjs +0 -0
  154. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockResponses.cjs +0 -0
  155. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockResponses.d.cts +0 -0
  156. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockResponses.d.mts +0 -0
  157. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockResponses.mjs +0 -0
  158. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockStorage.cjs +0 -0
  159. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockStorage.d.cts +0 -0
  160. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockStorage.d.mts +0 -0
  161. /package/dist/controllers/user-storage/{__fixtures__ → mocks}/mockStorage.mjs +0 -0
@@ -1,167 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.mockUserStorageMessenger = exports.createCustomUserStorageMessenger = void 0;
4
- const base_controller_1 = require("@metamask/base-controller");
5
- const _1 = require("./index.cjs");
6
- const typedMockFn = (_type) => jest.fn();
7
- /**
8
- * creates a custom user storage messenger, in case tests need different permissions
9
- *
10
- * @param props - overrides
11
- * @param props.overrideEvents - override events
12
- * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls
13
- */
14
- function createCustomUserStorageMessenger(props) {
15
- const baseMessenger = new base_controller_1.Messenger();
16
- const messenger = baseMessenger.getRestricted({
17
- name: 'UserStorageController',
18
- allowedActions: [
19
- 'KeyringController:getState',
20
- 'KeyringController:withKeyring',
21
- 'SnapController:handleRequest',
22
- 'AuthenticationController:getBearerToken',
23
- 'AuthenticationController:getSessionProfile',
24
- 'AuthenticationController:isSignedIn',
25
- 'AuthenticationController:performSignOut',
26
- 'AuthenticationController:performSignIn',
27
- 'AccountsController:listAccounts',
28
- 'AccountsController:updateAccountMetadata',
29
- 'NetworkController:getState',
30
- 'NetworkController:addNetwork',
31
- 'NetworkController:updateNetwork',
32
- 'NetworkController:removeNetwork',
33
- ],
34
- allowedEvents: props?.overrideEvents ?? [
35
- 'KeyringController:lock',
36
- 'KeyringController:unlock',
37
- 'AccountsController:accountAdded',
38
- 'AccountsController:accountRenamed',
39
- 'NetworkController:networkRemoved',
40
- ],
41
- });
42
- return {
43
- baseMessenger,
44
- messenger,
45
- };
46
- }
47
- exports.createCustomUserStorageMessenger = createCustomUserStorageMessenger;
48
- /**
49
- * Jest Mock Utility to generate a mock User Storage Messenger
50
- *
51
- * @param overrideMessengers - override messengers if need to modify the underlying permissions
52
- * @returns series of mocks to actions that can be called
53
- */
54
- function mockUserStorageMessenger(overrideMessengers) {
55
- const { baseMessenger, messenger } = overrideMessengers ?? createCustomUserStorageMessenger();
56
- const mockSnapGetPublicKey = jest.fn().mockResolvedValue('MOCK_PUBLIC_KEY');
57
- const mockSnapSignMessage = jest
58
- .fn()
59
- .mockResolvedValue(_1.MOCK_STORAGE_KEY_SIGNATURE);
60
- const mockAuthGetBearerToken = typedMockFn('AuthenticationController:getBearerToken').mockResolvedValue('MOCK_BEARER_TOKEN');
61
- const mockAuthGetSessionProfile = typedMockFn('AuthenticationController:getSessionProfile').mockResolvedValue({
62
- identifierId: '',
63
- profileId: 'MOCK_PROFILE_ID',
64
- });
65
- const mockAuthPerformSignIn = typedMockFn('AuthenticationController:performSignIn').mockResolvedValue('New Access Token');
66
- const mockAuthIsSignedIn = typedMockFn('AuthenticationController:isSignedIn').mockReturnValue(true);
67
- const mockAuthPerformSignOut = typedMockFn('AuthenticationController:performSignOut');
68
- const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');
69
- const mockAccountsListAccounts = jest.fn();
70
- const mockKeyringGetAccounts = jest.fn();
71
- const mockKeyringAddAccounts = jest.fn();
72
- const mockAccountsUpdateAccountMetadata = typedMockFn('AccountsController:updateAccountMetadata').mockResolvedValue(true);
73
- const mockNetworkControllerGetState = typedMockFn('NetworkController:getState').mockReturnValue({
74
- selectedNetworkClientId: '',
75
- networksMetadata: {},
76
- networkConfigurationsByChainId: {},
77
- });
78
- const mockNetworkControllerAddNetwork = typedMockFn('NetworkController:addNetwork');
79
- const mockNetworkControllerRemoveNetwork = typedMockFn('NetworkController:removeNetwork');
80
- const mockNetworkControllerUpdateNetwork = typedMockFn('NetworkController:updateNetwork');
81
- jest.spyOn(messenger, 'call').mockImplementation((...args) => {
82
- const typedArgs = args;
83
- const [actionType] = typedArgs;
84
- if (actionType === 'SnapController:handleRequest') {
85
- const [, params] = typedArgs;
86
- if (params.request.method === 'getPublicKey') {
87
- return mockSnapGetPublicKey();
88
- }
89
- if (params.request.method === 'signMessage') {
90
- return mockSnapSignMessage();
91
- }
92
- throw new Error(`MOCK_FAIL - unsupported SnapController:handleRequest call: ${params.request.method}`);
93
- }
94
- if (actionType === 'AuthenticationController:getBearerToken') {
95
- return mockAuthGetBearerToken();
96
- }
97
- if (actionType === 'AuthenticationController:getSessionProfile') {
98
- return mockAuthGetSessionProfile();
99
- }
100
- if (actionType === 'AuthenticationController:performSignIn') {
101
- return mockAuthPerformSignIn();
102
- }
103
- if (actionType === 'AuthenticationController:isSignedIn') {
104
- return mockAuthIsSignedIn();
105
- }
106
- if (actionType === 'AuthenticationController:performSignOut') {
107
- return mockAuthPerformSignOut();
108
- }
109
- if (actionType === 'KeyringController:getState') {
110
- return { isUnlocked: true };
111
- }
112
- if (actionType === 'KeyringController:withKeyring') {
113
- const [, ...params] = typedArgs;
114
- const [, operation] = params;
115
- const keyring = {
116
- getAccounts: mockKeyringGetAccounts,
117
- addAccounts: mockKeyringAddAccounts,
118
- };
119
- return operation(keyring);
120
- }
121
- if (actionType === 'AccountsController:listAccounts') {
122
- return mockAccountsListAccounts();
123
- }
124
- if (typedArgs[0] === 'AccountsController:updateAccountMetadata') {
125
- const [, ...params] = typedArgs;
126
- return mockAccountsUpdateAccountMetadata(...params);
127
- }
128
- if (actionType === 'NetworkController:getState') {
129
- return mockNetworkControllerGetState();
130
- }
131
- if (actionType === 'NetworkController:addNetwork') {
132
- const [, ...params] = typedArgs;
133
- return mockNetworkControllerAddNetwork(...params);
134
- }
135
- if (actionType === 'NetworkController:removeNetwork') {
136
- const [, ...params] = typedArgs;
137
- return mockNetworkControllerRemoveNetwork(...params);
138
- }
139
- if (actionType === 'NetworkController:updateNetwork') {
140
- const [, ...params] = typedArgs;
141
- return mockNetworkControllerUpdateNetwork(...params);
142
- }
143
- throw new Error(`MOCK_FAIL - unsupported messenger call: ${actionType}`);
144
- });
145
- return {
146
- baseMessenger,
147
- messenger,
148
- mockSnapGetPublicKey,
149
- mockSnapSignMessage,
150
- mockAuthGetBearerToken,
151
- mockAuthGetSessionProfile,
152
- mockAuthPerformSignIn,
153
- mockAuthIsSignedIn,
154
- mockAuthPerformSignOut,
155
- mockKeyringGetAccounts,
156
- mockKeyringAddAccounts,
157
- mockKeyringWithKeyring,
158
- mockAccountsUpdateAccountMetadata,
159
- mockAccountsListAccounts,
160
- mockNetworkControllerGetState,
161
- mockNetworkControllerAddNetwork,
162
- mockNetworkControllerRemoveNetwork,
163
- mockNetworkControllerUpdateNetwork,
164
- };
165
- }
166
- exports.mockUserStorageMessenger = mockUserStorageMessenger;
167
- //# sourceMappingURL=mockMessenger.cjs.map
@@ -1 +0,0 @@
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,105 +0,0 @@
1
- /// <reference types="jest" />
2
- import type { NotNamespacedBy } from "@metamask/base-controller";
3
- import { Messenger } from "@metamask/base-controller";
4
- import type { EthKeyring } from "@metamask/keyring-internal-api";
5
- import type { AllowedActions, AllowedEvents, UserStorageControllerMessenger } from "../index.cjs";
6
- type ExternalEvents = NotNamespacedBy<'UserStorageController', AllowedEvents['type']>;
7
- /**
8
- * creates a custom user storage messenger, in case tests need different permissions
9
- *
10
- * @param props - overrides
11
- * @param props.overrideEvents - override events
12
- * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls
13
- */
14
- export declare function createCustomUserStorageMessenger(props?: {
15
- overrideEvents?: ExternalEvents[];
16
- }): {
17
- baseMessenger: Messenger<AllowedActions, AllowedEvents>;
18
- messenger: import("@metamask/base-controller").RestrictedMessenger<"UserStorageController", import("@metamask/snaps-controllers").HandleSnapRequest | {
19
- type: "AuthenticationController:isSignedIn";
20
- handler: () => boolean;
21
- } | {
22
- type: "AuthenticationController:performSignIn";
23
- handler: () => Promise<string>;
24
- } | {
25
- type: "AuthenticationController:performSignOut";
26
- handler: () => void;
27
- } | {
28
- type: "AuthenticationController:getBearerToken";
29
- handler: () => Promise<string>;
30
- } | {
31
- type: "AuthenticationController:getSessionProfile";
32
- handler: () => Promise<{
33
- identifierId: string;
34
- profileId: string;
35
- }>;
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">;
37
- };
38
- type OverrideMessengers = {
39
- baseMessenger: Messenger<AllowedActions, AllowedEvents>;
40
- messenger: UserStorageControllerMessenger;
41
- };
42
- /**
43
- * Jest Mock Utility to generate a mock User Storage Messenger
44
- *
45
- * @param overrideMessengers - override messengers if need to modify the underlying permissions
46
- * @returns series of mocks to actions that can be called
47
- */
48
- export declare function mockUserStorageMessenger(overrideMessengers?: OverrideMessengers): {
49
- baseMessenger: Messenger<AllowedActions, AllowedEvents>;
50
- messenger: import("@metamask/base-controller").RestrictedMessenger<"UserStorageController", import("@metamask/snaps-controllers").HandleSnapRequest | {
51
- type: "AuthenticationController:isSignedIn";
52
- handler: () => boolean;
53
- } | {
54
- type: "AuthenticationController:performSignIn";
55
- handler: () => Promise<string>;
56
- } | {
57
- type: "AuthenticationController:performSignOut";
58
- handler: () => void;
59
- } | {
60
- type: "AuthenticationController:getBearerToken";
61
- handler: () => Promise<string>;
62
- } | {
63
- type: "AuthenticationController:getSessionProfile";
64
- handler: () => Promise<{
65
- identifierId: string;
66
- profileId: string;
67
- }>;
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">;
69
- mockSnapGetPublicKey: jest.Mock<any, any>;
70
- mockSnapSignMessage: jest.Mock<any, any>;
71
- mockAuthGetBearerToken: jest.Mock<Promise<string>, []>;
72
- mockAuthGetSessionProfile: jest.Mock<Promise<{
73
- identifierId: string;
74
- profileId: string;
75
- }>, []>;
76
- mockAuthPerformSignIn: jest.Mock<Promise<string>, []>;
77
- mockAuthIsSignedIn: jest.Mock<boolean, []>;
78
- mockAuthPerformSignOut: jest.Mock<void, []>;
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>]>;
82
- mockAccountsUpdateAccountMetadata: jest.Mock<void, [accountId: string, metadata: Partial<{
83
- name: string;
84
- importTime: number;
85
- keyring: {
86
- type: string;
87
- };
88
- nameLastUpdatedAt?: number | undefined;
89
- snap?: {
90
- name: string;
91
- id: string;
92
- enabled: boolean;
93
- } | undefined;
94
- lastSelected?: number | undefined;
95
- }>]>;
96
- mockAccountsListAccounts: jest.Mock<any, any>;
97
- mockNetworkControllerGetState: jest.Mock<import("@metamask/network-controller").NetworkState, []>;
98
- mockNetworkControllerAddNetwork: jest.Mock<import("@metamask/network-controller").NetworkConfiguration, [fields: import("@metamask/network-controller").AddNetworkFields]>;
99
- mockNetworkControllerRemoveNetwork: jest.Mock<void, [chainId: `0x${string}`]>;
100
- mockNetworkControllerUpdateNetwork: jest.Mock<Promise<import("@metamask/network-controller").NetworkConfiguration>, [`0x${string}`, import("@metamask/network-controller").UpdateNetworkFields, ({
101
- replacementSelectedRpcEndpointIndex?: number | undefined;
102
- } | undefined)?]>;
103
- };
104
- export {};
105
- //# sourceMappingURL=mockMessenger.d.cts.map
@@ -1 +0,0 @@
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,105 +0,0 @@
1
- /// <reference types="jest" />
2
- import type { NotNamespacedBy } from "@metamask/base-controller";
3
- import { Messenger } from "@metamask/base-controller";
4
- import type { EthKeyring } from "@metamask/keyring-internal-api";
5
- import type { AllowedActions, AllowedEvents, UserStorageControllerMessenger } from "../index.mjs";
6
- type ExternalEvents = NotNamespacedBy<'UserStorageController', AllowedEvents['type']>;
7
- /**
8
- * creates a custom user storage messenger, in case tests need different permissions
9
- *
10
- * @param props - overrides
11
- * @param props.overrideEvents - override events
12
- * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls
13
- */
14
- export declare function createCustomUserStorageMessenger(props?: {
15
- overrideEvents?: ExternalEvents[];
16
- }): {
17
- baseMessenger: Messenger<AllowedActions, AllowedEvents>;
18
- messenger: import("@metamask/base-controller").RestrictedMessenger<"UserStorageController", import("@metamask/snaps-controllers").HandleSnapRequest | {
19
- type: "AuthenticationController:isSignedIn";
20
- handler: () => boolean;
21
- } | {
22
- type: "AuthenticationController:performSignIn";
23
- handler: () => Promise<string>;
24
- } | {
25
- type: "AuthenticationController:performSignOut";
26
- handler: () => void;
27
- } | {
28
- type: "AuthenticationController:getBearerToken";
29
- handler: () => Promise<string>;
30
- } | {
31
- type: "AuthenticationController:getSessionProfile";
32
- handler: () => Promise<{
33
- identifierId: string;
34
- profileId: string;
35
- }>;
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">;
37
- };
38
- type OverrideMessengers = {
39
- baseMessenger: Messenger<AllowedActions, AllowedEvents>;
40
- messenger: UserStorageControllerMessenger;
41
- };
42
- /**
43
- * Jest Mock Utility to generate a mock User Storage Messenger
44
- *
45
- * @param overrideMessengers - override messengers if need to modify the underlying permissions
46
- * @returns series of mocks to actions that can be called
47
- */
48
- export declare function mockUserStorageMessenger(overrideMessengers?: OverrideMessengers): {
49
- baseMessenger: Messenger<AllowedActions, AllowedEvents>;
50
- messenger: import("@metamask/base-controller").RestrictedMessenger<"UserStorageController", import("@metamask/snaps-controllers").HandleSnapRequest | {
51
- type: "AuthenticationController:isSignedIn";
52
- handler: () => boolean;
53
- } | {
54
- type: "AuthenticationController:performSignIn";
55
- handler: () => Promise<string>;
56
- } | {
57
- type: "AuthenticationController:performSignOut";
58
- handler: () => void;
59
- } | {
60
- type: "AuthenticationController:getBearerToken";
61
- handler: () => Promise<string>;
62
- } | {
63
- type: "AuthenticationController:getSessionProfile";
64
- handler: () => Promise<{
65
- identifierId: string;
66
- profileId: string;
67
- }>;
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">;
69
- mockSnapGetPublicKey: jest.Mock<any, any>;
70
- mockSnapSignMessage: jest.Mock<any, any>;
71
- mockAuthGetBearerToken: jest.Mock<Promise<string>, []>;
72
- mockAuthGetSessionProfile: jest.Mock<Promise<{
73
- identifierId: string;
74
- profileId: string;
75
- }>, []>;
76
- mockAuthPerformSignIn: jest.Mock<Promise<string>, []>;
77
- mockAuthIsSignedIn: jest.Mock<boolean, []>;
78
- mockAuthPerformSignOut: jest.Mock<void, []>;
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>]>;
82
- mockAccountsUpdateAccountMetadata: jest.Mock<void, [accountId: string, metadata: Partial<{
83
- name: string;
84
- importTime: number;
85
- keyring: {
86
- type: string;
87
- };
88
- nameLastUpdatedAt?: number | undefined;
89
- snap?: {
90
- name: string;
91
- id: string;
92
- enabled: boolean;
93
- } | undefined;
94
- lastSelected?: number | undefined;
95
- }>]>;
96
- mockAccountsListAccounts: jest.Mock<any, any>;
97
- mockNetworkControllerGetState: jest.Mock<import("@metamask/network-controller").NetworkState, []>;
98
- mockNetworkControllerAddNetwork: jest.Mock<import("@metamask/network-controller").NetworkConfiguration, [fields: import("@metamask/network-controller").AddNetworkFields]>;
99
- mockNetworkControllerRemoveNetwork: jest.Mock<void, [chainId: `0x${string}`]>;
100
- mockNetworkControllerUpdateNetwork: jest.Mock<Promise<import("@metamask/network-controller").NetworkConfiguration>, [`0x${string}`, import("@metamask/network-controller").UpdateNetworkFields, ({
101
- replacementSelectedRpcEndpointIndex?: number | undefined;
102
- } | undefined)?]>;
103
- };
104
- export {};
105
- //# sourceMappingURL=mockMessenger.d.mts.map
@@ -1 +0,0 @@
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"}
@@ -1,162 +0,0 @@
1
- import { Messenger } from "@metamask/base-controller";
2
- import { MOCK_STORAGE_KEY_SIGNATURE } from "./index.mjs";
3
- const typedMockFn = (_type) => jest.fn();
4
- /**
5
- * creates a custom user storage messenger, in case tests need different permissions
6
- *
7
- * @param props - overrides
8
- * @param props.overrideEvents - override events
9
- * @returns base messenger, and messenger. You can pass this into the mocks below to mock messenger calls
10
- */
11
- export function createCustomUserStorageMessenger(props) {
12
- const baseMessenger = new Messenger();
13
- const messenger = baseMessenger.getRestricted({
14
- name: 'UserStorageController',
15
- allowedActions: [
16
- 'KeyringController:getState',
17
- 'KeyringController:withKeyring',
18
- 'SnapController:handleRequest',
19
- 'AuthenticationController:getBearerToken',
20
- 'AuthenticationController:getSessionProfile',
21
- 'AuthenticationController:isSignedIn',
22
- 'AuthenticationController:performSignOut',
23
- 'AuthenticationController:performSignIn',
24
- 'AccountsController:listAccounts',
25
- 'AccountsController:updateAccountMetadata',
26
- 'NetworkController:getState',
27
- 'NetworkController:addNetwork',
28
- 'NetworkController:updateNetwork',
29
- 'NetworkController:removeNetwork',
30
- ],
31
- allowedEvents: props?.overrideEvents ?? [
32
- 'KeyringController:lock',
33
- 'KeyringController:unlock',
34
- 'AccountsController:accountAdded',
35
- 'AccountsController:accountRenamed',
36
- 'NetworkController:networkRemoved',
37
- ],
38
- });
39
- return {
40
- baseMessenger,
41
- messenger,
42
- };
43
- }
44
- /**
45
- * Jest Mock Utility to generate a mock User Storage Messenger
46
- *
47
- * @param overrideMessengers - override messengers if need to modify the underlying permissions
48
- * @returns series of mocks to actions that can be called
49
- */
50
- export function mockUserStorageMessenger(overrideMessengers) {
51
- const { baseMessenger, messenger } = overrideMessengers ?? createCustomUserStorageMessenger();
52
- const mockSnapGetPublicKey = jest.fn().mockResolvedValue('MOCK_PUBLIC_KEY');
53
- const mockSnapSignMessage = jest
54
- .fn()
55
- .mockResolvedValue(MOCK_STORAGE_KEY_SIGNATURE);
56
- const mockAuthGetBearerToken = typedMockFn('AuthenticationController:getBearerToken').mockResolvedValue('MOCK_BEARER_TOKEN');
57
- const mockAuthGetSessionProfile = typedMockFn('AuthenticationController:getSessionProfile').mockResolvedValue({
58
- identifierId: '',
59
- profileId: 'MOCK_PROFILE_ID',
60
- });
61
- const mockAuthPerformSignIn = typedMockFn('AuthenticationController:performSignIn').mockResolvedValue('New Access Token');
62
- const mockAuthIsSignedIn = typedMockFn('AuthenticationController:isSignedIn').mockReturnValue(true);
63
- const mockAuthPerformSignOut = typedMockFn('AuthenticationController:performSignOut');
64
- const mockKeyringWithKeyring = typedMockFn('KeyringController:withKeyring');
65
- const mockAccountsListAccounts = jest.fn();
66
- const mockKeyringGetAccounts = jest.fn();
67
- const mockKeyringAddAccounts = jest.fn();
68
- const mockAccountsUpdateAccountMetadata = typedMockFn('AccountsController:updateAccountMetadata').mockResolvedValue(true);
69
- const mockNetworkControllerGetState = typedMockFn('NetworkController:getState').mockReturnValue({
70
- selectedNetworkClientId: '',
71
- networksMetadata: {},
72
- networkConfigurationsByChainId: {},
73
- });
74
- const mockNetworkControllerAddNetwork = typedMockFn('NetworkController:addNetwork');
75
- const mockNetworkControllerRemoveNetwork = typedMockFn('NetworkController:removeNetwork');
76
- const mockNetworkControllerUpdateNetwork = typedMockFn('NetworkController:updateNetwork');
77
- jest.spyOn(messenger, 'call').mockImplementation((...args) => {
78
- const typedArgs = args;
79
- const [actionType] = typedArgs;
80
- if (actionType === 'SnapController:handleRequest') {
81
- const [, params] = typedArgs;
82
- if (params.request.method === 'getPublicKey') {
83
- return mockSnapGetPublicKey();
84
- }
85
- if (params.request.method === 'signMessage') {
86
- return mockSnapSignMessage();
87
- }
88
- throw new Error(`MOCK_FAIL - unsupported SnapController:handleRequest call: ${params.request.method}`);
89
- }
90
- if (actionType === 'AuthenticationController:getBearerToken') {
91
- return mockAuthGetBearerToken();
92
- }
93
- if (actionType === 'AuthenticationController:getSessionProfile') {
94
- return mockAuthGetSessionProfile();
95
- }
96
- if (actionType === 'AuthenticationController:performSignIn') {
97
- return mockAuthPerformSignIn();
98
- }
99
- if (actionType === 'AuthenticationController:isSignedIn') {
100
- return mockAuthIsSignedIn();
101
- }
102
- if (actionType === 'AuthenticationController:performSignOut') {
103
- return mockAuthPerformSignOut();
104
- }
105
- if (actionType === 'KeyringController:getState') {
106
- return { isUnlocked: true };
107
- }
108
- if (actionType === 'KeyringController:withKeyring') {
109
- const [, ...params] = typedArgs;
110
- const [, operation] = params;
111
- const keyring = {
112
- getAccounts: mockKeyringGetAccounts,
113
- addAccounts: mockKeyringAddAccounts,
114
- };
115
- return operation(keyring);
116
- }
117
- if (actionType === 'AccountsController:listAccounts') {
118
- return mockAccountsListAccounts();
119
- }
120
- if (typedArgs[0] === 'AccountsController:updateAccountMetadata') {
121
- const [, ...params] = typedArgs;
122
- return mockAccountsUpdateAccountMetadata(...params);
123
- }
124
- if (actionType === 'NetworkController:getState') {
125
- return mockNetworkControllerGetState();
126
- }
127
- if (actionType === 'NetworkController:addNetwork') {
128
- const [, ...params] = typedArgs;
129
- return mockNetworkControllerAddNetwork(...params);
130
- }
131
- if (actionType === 'NetworkController:removeNetwork') {
132
- const [, ...params] = typedArgs;
133
- return mockNetworkControllerRemoveNetwork(...params);
134
- }
135
- if (actionType === 'NetworkController:updateNetwork') {
136
- const [, ...params] = typedArgs;
137
- return mockNetworkControllerUpdateNetwork(...params);
138
- }
139
- throw new Error(`MOCK_FAIL - unsupported messenger call: ${actionType}`);
140
- });
141
- return {
142
- baseMessenger,
143
- messenger,
144
- mockSnapGetPublicKey,
145
- mockSnapSignMessage,
146
- mockAuthGetBearerToken,
147
- mockAuthGetSessionProfile,
148
- mockAuthPerformSignIn,
149
- mockAuthIsSignedIn,
150
- mockAuthPerformSignOut,
151
- mockKeyringGetAccounts,
152
- mockKeyringAddAccounts,
153
- mockKeyringWithKeyring,
154
- mockAccountsUpdateAccountMetadata,
155
- mockAccountsListAccounts,
156
- mockNetworkControllerGetState,
157
- mockNetworkControllerAddNetwork,
158
- mockNetworkControllerRemoveNetwork,
159
- mockNetworkControllerUpdateNetwork,
160
- };
161
- }
162
- //# sourceMappingURL=mockMessenger.mjs.map
@@ -1 +0,0 @@
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 +0,0 @@
1
- {"version":3,"file":"mockResponses.cjs","sourceRoot":"","sources":["../../../../src/controllers/user-storage/__fixtures__/mockResponses.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n MOCK_ENCRYPTED_STORAGE_DATA,\n MOCK_STORAGE_DATA,\n MOCK_STORAGE_KEY,\n} from './mockStorage';\nimport type {\n UserStoragePathWithFeatureAndKey,\n UserStoragePathWithFeatureOnly,\n} from '../../../shared/storage-schema';\nimport {\n createEntryPath,\n USER_STORAGE_FEATURE_NAMES,\n} from '../../../shared/storage-schema';\nimport type {\n GetUserStorageAllFeatureEntriesResponse,\n GetUserStorageResponse,\n} from '../services';\nimport { USER_STORAGE_ENDPOINT } from '../services';\n\ntype MockResponse = {\n url: string;\n requestMethod: 'GET' | 'POST' | 'PUT' | 'DELETE';\n response: unknown;\n};\n\nexport const getMockUserStorageEndpoint = (\n path: UserStoragePathWithFeatureAndKey | UserStoragePathWithFeatureOnly,\n) => {\n if (path.split('.').length === 1) {\n return `${USER_STORAGE_ENDPOINT}/${path}`;\n }\n\n return `${USER_STORAGE_ENDPOINT}/${createEntryPath(\n path as UserStoragePathWithFeatureAndKey,\n MOCK_STORAGE_KEY,\n )}`;\n};\n\n/**\n * Creates a mock GET user-storage response\n *\n * @param data - data to encrypt\n * @returns a realistic GET Response Body\n */\nexport async function createMockGetStorageResponse(\n data?: string,\n): Promise<GetUserStorageResponse> {\n return {\n HashedKey: 'HASHED_KEY',\n Data: await MOCK_ENCRYPTED_STORAGE_DATA(data),\n };\n}\n\n/**\n * Creates a mock GET ALL user-storage response\n *\n * @param dataArr - array of data to encrypt\n * @returns a realistic GET ALL Response Body\n */\nexport async function createMockAllFeatureEntriesResponse(\n dataArr: string[] = [MOCK_STORAGE_DATA],\n): Promise<GetUserStorageAllFeatureEntriesResponse> {\n const decryptedData = [];\n\n for (const data of dataArr) {\n decryptedData.push({\n HashedKey: 'HASHED_KEY',\n Data: await MOCK_ENCRYPTED_STORAGE_DATA(data),\n });\n }\n\n return decryptedData;\n}\n\n/**\n * Creates a mock user-storage api GET request\n *\n * @param path - path of the GET Url\n * @returns mock GET API request. Can be used by e2e or unit mock servers\n */\nexport async function getMockUserStorageGetResponse(\n path: UserStoragePathWithFeatureAndKey = `${USER_STORAGE_FEATURE_NAMES.notifications}.notification_settings`,\n) {\n return {\n url: getMockUserStorageEndpoint(path),\n requestMethod: 'GET',\n response: await createMockGetStorageResponse(),\n } satisfies MockResponse;\n}\n\n/**\n * Creates a mock user-storage api GET ALL request\n *\n * @param path - path of the GET url\n * @param dataArr - data to encrypt\n * @returns mock GET ALL API request. Can be used by e2e or unit mock servers\n */\nexport async function getMockUserStorageAllFeatureEntriesResponse(\n path: UserStoragePathWithFeatureOnly = USER_STORAGE_FEATURE_NAMES.notifications,\n dataArr?: string[],\n) {\n return {\n url: getMockUserStorageEndpoint(path),\n requestMethod: 'GET',\n response: await createMockAllFeatureEntriesResponse(dataArr),\n } satisfies MockResponse;\n}\n\nexport const getMockUserStoragePutResponse = (\n path: UserStoragePathWithFeatureAndKey = `${USER_STORAGE_FEATURE_NAMES.notifications}.notification_settings`,\n) => {\n return {\n url: getMockUserStorageEndpoint(path),\n requestMethod: 'PUT',\n response: null,\n } satisfies MockResponse;\n};\n\nexport const getMockUserStorageBatchPutResponse = (\n path: UserStoragePathWithFeatureOnly = USER_STORAGE_FEATURE_NAMES.notifications,\n) => {\n return {\n url: getMockUserStorageEndpoint(path),\n requestMethod: 'PUT',\n response: null,\n } satisfies MockResponse;\n};\n\nexport const getMockUserStorageBatchDeleteResponse = (\n path: UserStoragePathWithFeatureOnly = 'notifications',\n) => {\n return {\n url: getMockUserStorageEndpoint(path),\n requestMethod: 'PUT',\n response: null,\n } satisfies MockResponse;\n};\n\nexport const deleteMockUserStorageResponse = (\n path: UserStoragePathWithFeatureAndKey = `${USER_STORAGE_FEATURE_NAMES.notifications}.notification_settings`,\n) => {\n return {\n url: getMockUserStorageEndpoint(path),\n requestMethod: 'DELETE',\n response: null,\n } satisfies MockResponse;\n};\n\nexport const deleteMockUserStorageAllFeatureEntriesResponse = (\n path: UserStoragePathWithFeatureOnly = USER_STORAGE_FEATURE_NAMES.notifications,\n) => {\n return {\n url: getMockUserStorageEndpoint(path),\n requestMethod: 'DELETE',\n response: null,\n } satisfies MockResponse;\n};\n"]}