@metamask/snaps-controllers 4.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/CHANGELOG.md +33 -1
  2. package/dist/cjs/cronjob/CronjobController.js +3 -3
  3. package/dist/cjs/cronjob/CronjobController.js.map +1 -1
  4. package/dist/cjs/index.js +1 -0
  5. package/dist/cjs/index.js.map +1 -1
  6. package/dist/cjs/interface/SnapInterfaceController.js +166 -0
  7. package/dist/cjs/interface/SnapInterfaceController.js.map +1 -0
  8. package/dist/cjs/interface/index.js +20 -0
  9. package/dist/cjs/interface/index.js.map +1 -0
  10. package/dist/cjs/interface/utils.js +59 -0
  11. package/dist/cjs/interface/utils.js.map +1 -0
  12. package/dist/cjs/services/ProxyPostMessageStream.js +3 -10
  13. package/dist/cjs/services/ProxyPostMessageStream.js.map +1 -1
  14. package/dist/cjs/services/browser.js +1 -0
  15. package/dist/cjs/services/browser.js.map +1 -1
  16. package/dist/cjs/services/index.js +1 -0
  17. package/dist/cjs/services/index.js.map +1 -1
  18. package/dist/cjs/services/node/NodeProcessExecutionService.js +13 -1
  19. package/dist/cjs/services/node/NodeProcessExecutionService.js.map +1 -1
  20. package/dist/cjs/services/node/NodeThreadExecutionService.js +14 -1
  21. package/dist/cjs/services/node/NodeThreadExecutionService.js.map +1 -1
  22. package/dist/cjs/services/offscreen/OffscreenExecutionService.js +36 -99
  23. package/dist/cjs/services/offscreen/OffscreenExecutionService.js.map +1 -1
  24. package/dist/cjs/services/proxy/ProxyExecutionService.js +110 -0
  25. package/dist/cjs/services/proxy/ProxyExecutionService.js.map +1 -0
  26. package/dist/cjs/services/webview/WebViewExecutionService.js +99 -0
  27. package/dist/cjs/services/webview/WebViewExecutionService.js.map +1 -0
  28. package/dist/cjs/services/webview/WebViewMessageStream.js +127 -0
  29. package/dist/cjs/services/webview/WebViewMessageStream.js.map +1 -0
  30. package/dist/cjs/services/webview/index.js +20 -0
  31. package/dist/cjs/services/webview/index.js.map +1 -0
  32. package/dist/cjs/snaps/SnapController.js +303 -138
  33. package/dist/cjs/snaps/SnapController.js.map +1 -1
  34. package/dist/cjs/snaps/constants.js +25 -0
  35. package/dist/cjs/snaps/constants.js.map +1 -0
  36. package/dist/cjs/snaps/index.js +0 -2
  37. package/dist/cjs/snaps/index.js.map +1 -1
  38. package/dist/cjs/snaps/location/npm.js +13 -2
  39. package/dist/cjs/snaps/location/npm.js.map +1 -1
  40. package/dist/cjs/utils.js +32 -0
  41. package/dist/cjs/utils.js.map +1 -1
  42. package/dist/esm/cronjob/CronjobController.js +2 -2
  43. package/dist/esm/cronjob/CronjobController.js.map +1 -1
  44. package/dist/esm/index.js +1 -0
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/interface/SnapInterfaceController.js +158 -0
  47. package/dist/esm/interface/SnapInterfaceController.js.map +1 -0
  48. package/dist/esm/interface/index.js +3 -0
  49. package/dist/esm/interface/index.js.map +1 -0
  50. package/dist/esm/interface/utils.js +62 -0
  51. package/dist/esm/interface/utils.js.map +1 -0
  52. package/dist/esm/services/ProxyPostMessageStream.js +3 -10
  53. package/dist/esm/services/ProxyPostMessageStream.js.map +1 -1
  54. package/dist/esm/services/browser.js +1 -0
  55. package/dist/esm/services/browser.js.map +1 -1
  56. package/dist/esm/services/index.js +1 -0
  57. package/dist/esm/services/index.js.map +1 -1
  58. package/dist/esm/services/node/NodeProcessExecutionService.js +13 -1
  59. package/dist/esm/services/node/NodeProcessExecutionService.js.map +1 -1
  60. package/dist/esm/services/node/NodeThreadExecutionService.js +14 -1
  61. package/dist/esm/services/node/NodeThreadExecutionService.js.map +1 -1
  62. package/dist/esm/services/offscreen/OffscreenExecutionService.js +36 -99
  63. package/dist/esm/services/offscreen/OffscreenExecutionService.js.map +1 -1
  64. package/dist/esm/services/proxy/ProxyExecutionService.js +100 -0
  65. package/dist/esm/services/proxy/ProxyExecutionService.js.map +1 -0
  66. package/dist/esm/services/webview/WebViewExecutionService.js +89 -0
  67. package/dist/esm/services/webview/WebViewExecutionService.js.map +1 -0
  68. package/dist/esm/services/webview/WebViewMessageStream.js +119 -0
  69. package/dist/esm/services/webview/WebViewMessageStream.js.map +1 -0
  70. package/dist/esm/services/webview/index.js +3 -0
  71. package/dist/esm/services/webview/index.js.map +1 -0
  72. package/dist/esm/snaps/SnapController.js +299 -134
  73. package/dist/esm/snaps/SnapController.js.map +1 -1
  74. package/dist/esm/snaps/constants.js +16 -0
  75. package/dist/esm/snaps/constants.js.map +1 -0
  76. package/dist/esm/snaps/index.js +0 -2
  77. package/dist/esm/snaps/index.js.map +1 -1
  78. package/dist/esm/snaps/location/npm.js +13 -2
  79. package/dist/esm/snaps/location/npm.js.map +1 -1
  80. package/dist/esm/utils.js +37 -0
  81. package/dist/esm/utils.js.map +1 -1
  82. package/dist/types/index.d.ts +1 -0
  83. package/dist/types/interface/SnapInterfaceController.d.ts +85 -0
  84. package/dist/types/interface/index.d.ts +1 -0
  85. package/dist/types/interface/utils.d.ts +36 -0
  86. package/dist/types/services/ProxyPostMessageStream.d.ts +1 -2
  87. package/dist/types/services/browser.d.ts +1 -0
  88. package/dist/types/services/index.d.ts +1 -0
  89. package/dist/types/services/offscreen/OffscreenExecutionService.d.ts +5 -22
  90. package/dist/types/services/proxy/ProxyExecutionService.d.ts +39 -0
  91. package/dist/types/services/webview/WebViewExecutionService.d.ts +20 -0
  92. package/dist/types/services/webview/WebViewMessageStream.d.ts +32 -0
  93. package/dist/types/services/webview/index.d.ts +1 -0
  94. package/dist/types/snaps/SnapController.d.ts +37 -6
  95. package/dist/types/snaps/constants.d.ts +1 -0
  96. package/dist/types/snaps/index.d.ts +0 -2
  97. package/dist/types/utils.d.ts +119 -0
  98. package/package.json +14 -14
  99. package/dist/cjs/snaps/endowments/cronjob.js +0 -100
  100. package/dist/cjs/snaps/endowments/cronjob.js.map +0 -1
  101. package/dist/cjs/snaps/endowments/enum.js +0 -25
  102. package/dist/cjs/snaps/endowments/enum.js.map +0 -1
  103. package/dist/cjs/snaps/endowments/ethereum-provider.js +0 -43
  104. package/dist/cjs/snaps/endowments/ethereum-provider.js.map +0 -1
  105. package/dist/cjs/snaps/endowments/home-page.js +0 -37
  106. package/dist/cjs/snaps/endowments/home-page.js.map +0 -1
  107. package/dist/cjs/snaps/endowments/index.js +0 -99
  108. package/dist/cjs/snaps/endowments/index.js.map +0 -1
  109. package/dist/cjs/snaps/endowments/keyring.js +0 -100
  110. package/dist/cjs/snaps/endowments/keyring.js.map +0 -1
  111. package/dist/cjs/snaps/endowments/lifecycle-hooks.js +0 -37
  112. package/dist/cjs/snaps/endowments/lifecycle-hooks.js.map +0 -1
  113. package/dist/cjs/snaps/endowments/name-lookup.js +0 -106
  114. package/dist/cjs/snaps/endowments/name-lookup.js.map +0 -1
  115. package/dist/cjs/snaps/endowments/network-access.js +0 -44
  116. package/dist/cjs/snaps/endowments/network-access.js.map +0 -1
  117. package/dist/cjs/snaps/endowments/rpc.js +0 -99
  118. package/dist/cjs/snaps/endowments/rpc.js.map +0 -1
  119. package/dist/cjs/snaps/endowments/transaction-insight.js +0 -106
  120. package/dist/cjs/snaps/endowments/transaction-insight.js.map +0 -1
  121. package/dist/cjs/snaps/endowments/web-assembly.js +0 -42
  122. package/dist/cjs/snaps/endowments/web-assembly.js.map +0 -1
  123. package/dist/cjs/snaps/permissions.js +0 -61
  124. package/dist/cjs/snaps/permissions.js.map +0 -1
  125. package/dist/esm/snaps/endowments/cronjob.js +0 -99
  126. package/dist/esm/snaps/endowments/cronjob.js.map +0 -1
  127. package/dist/esm/snaps/endowments/enum.js +0 -15
  128. package/dist/esm/snaps/endowments/enum.js.map +0 -1
  129. package/dist/esm/snaps/endowments/ethereum-provider.js +0 -33
  130. package/dist/esm/snaps/endowments/ethereum-provider.js.map +0 -1
  131. package/dist/esm/snaps/endowments/home-page.js +0 -27
  132. package/dist/esm/snaps/endowments/home-page.js.map +0 -1
  133. package/dist/esm/snaps/endowments/index.js +0 -54
  134. package/dist/esm/snaps/endowments/index.js.map +0 -1
  135. package/dist/esm/snaps/endowments/keyring.js +0 -91
  136. package/dist/esm/snaps/endowments/keyring.js.map +0 -1
  137. package/dist/esm/snaps/endowments/lifecycle-hooks.js +0 -27
  138. package/dist/esm/snaps/endowments/lifecycle-hooks.js.map +0 -1
  139. package/dist/esm/snaps/endowments/name-lookup.js +0 -98
  140. package/dist/esm/snaps/endowments/name-lookup.js.map +0 -1
  141. package/dist/esm/snaps/endowments/network-access.js +0 -34
  142. package/dist/esm/snaps/endowments/network-access.js.map +0 -1
  143. package/dist/esm/snaps/endowments/rpc.js +0 -88
  144. package/dist/esm/snaps/endowments/rpc.js.map +0 -1
  145. package/dist/esm/snaps/endowments/transaction-insight.js +0 -99
  146. package/dist/esm/snaps/endowments/transaction-insight.js.map +0 -1
  147. package/dist/esm/snaps/endowments/web-assembly.js +0 -32
  148. package/dist/esm/snaps/endowments/web-assembly.js.map +0 -1
  149. package/dist/esm/snaps/permissions.js +0 -50
  150. package/dist/esm/snaps/permissions.js.map +0 -1
  151. package/dist/types/snaps/endowments/cronjob.d.ts +0 -51
  152. package/dist/types/snaps/endowments/enum.d.ts +0 -12
  153. package/dist/types/snaps/endowments/ethereum-provider.d.ts +0 -14
  154. package/dist/types/snaps/endowments/home-page.d.ts +0 -15
  155. package/dist/types/snaps/endowments/index.d.ts +0 -115
  156. package/dist/types/snaps/endowments/keyring.d.ts +0 -39
  157. package/dist/types/snaps/endowments/lifecycle-hooks.d.ts +0 -15
  158. package/dist/types/snaps/endowments/name-lookup.d.ts +0 -38
  159. package/dist/types/snaps/endowments/network-access.d.ts +0 -14
  160. package/dist/types/snaps/endowments/rpc.d.ts +0 -38
  161. package/dist/types/snaps/endowments/transaction-insight.d.ts +0 -39
  162. package/dist/types/snaps/endowments/web-assembly.d.ts +0 -14
  163. package/dist/types/snaps/permissions.d.ts +0 -16
@@ -2,15 +2,15 @@ import type { AddApprovalRequest, UpdateRequestState } from '@metamask/approval-
2
2
  import type { RestrictedControllerMessenger } from '@metamask/base-controller';
3
3
  import { BaseController } from '@metamask/base-controller';
4
4
  import type { GetEndowments, GetPermissions, GetSubjectMetadata, AddSubjectMetadata, GetSubjects, GrantPermissions, HasPermission, HasPermissions, RevokeAllPermissions, RevokePermissionForAllSubjects, RevokePermissions, UpdateCaveat } from '@metamask/permission-controller';
5
- import type { MaybeUpdateState, TestOrigin } from '@metamask/phishing-controller';
6
5
  import type { BlockReason } from '@metamask/snaps-registry';
7
6
  import type { RequestSnapsParams, RequestSnapsResult, SnapId } from '@metamask/snaps-sdk';
8
7
  import { AuxiliaryFileEncoding } from '@metamask/snaps-sdk';
9
- import type { PersistedSnap, Snap, SnapRpcHook, SnapRpcHookArgs, StatusContext, StatusEvents, StatusStates, TruncatedSnap } from '@metamask/snaps-utils';
8
+ import type { PersistedSnap, Snap, SnapManifest, SnapRpcHookArgs, StatusContext, StatusEvents, StatusStates, TruncatedSnap } from '@metamask/snaps-utils';
10
9
  import { SnapStatusEvents } from '@metamask/snaps-utils';
11
10
  import type { Json, NonEmptyArray } from '@metamask/utils';
12
11
  import type { StateMachine } from '@xstate/fsm';
13
12
  import type { Patch } from 'immer';
13
+ import type { CreateInterface, GetInterface } from '../interface';
14
14
  import type { ExecuteSnapAction, ExecutionServiceEvents, HandleRpcRequestAction, SnapErrorJson, TerminateAllSnapsAction, TerminateSnapAction } from '../services';
15
15
  import type { SnapLocation } from './location';
16
16
  import { detectSnapLocation } from './location';
@@ -24,6 +24,19 @@ export declare type PendingRequest = {
24
24
  requestId: unknown;
25
25
  timer: Timer;
26
26
  };
27
+ export interface PreinstalledSnapFile {
28
+ path: string;
29
+ value: string | Uint8Array;
30
+ }
31
+ export interface PreinstalledSnap {
32
+ snapId: SnapId;
33
+ manifest: SnapManifest;
34
+ files: PreinstalledSnapFile[];
35
+ removable?: boolean;
36
+ }
37
+ declare type SnapRpcHandler = (options: SnapRpcHookArgs & {
38
+ timeout: number;
39
+ }) => Promise<unknown>;
27
40
  /**
28
41
  * A wrapper type for any data stored during runtime of Snaps.
29
42
  * It is not persisted in state as it contains non-serializable data and is only relevant for the
@@ -54,7 +67,7 @@ export interface SnapRuntimeData {
54
67
  /**
55
68
  * RPC handler designated for the Snap
56
69
  */
57
- rpcHandler: null | SnapRpcHook;
70
+ rpcHandler: null | SnapRpcHandler;
58
71
  /**
59
72
  * The finite state machine interpreter for possible states that the Snap can be in such as
60
73
  * stopped, running, blocked
@@ -188,6 +201,20 @@ export declare type SnapBlocked = {
188
201
  type: `${typeof controllerName}:snapBlocked`;
189
202
  payload: [snapId: string, blockedSnapInfo?: BlockReason];
190
203
  };
204
+ /**
205
+ * Emitted when a snap installation or update is started.
206
+ */
207
+ export declare type SnapInstallStarted = {
208
+ type: `${typeof controllerName}:snapInstallStarted`;
209
+ payload: [snapId: SnapId, origin: string, isUpdate: boolean];
210
+ };
211
+ /**
212
+ * Emitted when a snap installation or update failed.
213
+ */
214
+ export declare type SnapInstallFailed = {
215
+ type: `${typeof controllerName}:snapInstallFailed`;
216
+ payload: [snapId: SnapId, origin: string, isUpdate: boolean, error: string];
217
+ };
191
218
  /**
192
219
  * Emitted when a snap has been started after being added and authorized during
193
220
  * installation.
@@ -247,8 +274,8 @@ export declare type SnapDisabled = {
247
274
  type: `${typeof controllerName}:snapDisabled`;
248
275
  payload: [snap: TruncatedSnap];
249
276
  };
250
- export declare type SnapControllerEvents = SnapBlocked | SnapInstalled | SnapUninstalled | SnapStateChange | SnapUnblocked | SnapUpdated | SnapRolledback | SnapTerminated | SnapEnabled | SnapDisabled;
251
- export declare type AllowedActions = GetEndowments | GetPermissions | GetSubjects | GetSubjectMetadata | AddSubjectMetadata | HasPermission | HasPermissions | RevokePermissions | RevokeAllPermissions | RevokePermissionForAllSubjects | GrantPermissions | AddApprovalRequest | HandleRpcRequestAction | ExecuteSnapAction | TerminateAllSnapsAction | TerminateSnapAction | UpdateCaveat | UpdateRequestState | GetResult | GetMetadata | Update | ResolveVersion | TestOrigin | MaybeUpdateState;
277
+ export declare type SnapControllerEvents = SnapBlocked | SnapInstalled | SnapUninstalled | SnapInstallStarted | SnapInstallFailed | SnapStateChange | SnapUnblocked | SnapUpdated | SnapRolledback | SnapTerminated | SnapEnabled | SnapDisabled;
278
+ export declare type AllowedActions = GetEndowments | GetPermissions | GetSubjects | GetSubjectMetadata | AddSubjectMetadata | HasPermission | HasPermissions | RevokePermissions | RevokeAllPermissions | RevokePermissionForAllSubjects | GrantPermissions | AddApprovalRequest | HandleRpcRequestAction | ExecuteSnapAction | TerminateAllSnapsAction | TerminateSnapAction | UpdateCaveat | UpdateRequestState | GetResult | GetMetadata | Update | ResolveVersion | CreateInterface | GetInterface;
252
279
  export declare type AllowedEvents = ExecutionServiceEvents | SnapInstalled | SnapUpdated;
253
280
  declare type SnapControllerMessenger = RestrictedControllerMessenger<typeof controllerName, SnapControllerActions | AllowedActions, SnapControllerEvents | AllowedEvents, AllowedActions['type'], AllowedEvents['type']>;
254
281
  declare type FeatureFlags = {
@@ -315,11 +342,15 @@ declare type SnapControllerArgs = {
315
342
  * Used for test overrides.
316
343
  */
317
344
  detectSnapLocation?: typeof detectSnapLocation;
345
+ /**
346
+ * A list of snaps to be preinstalled into the SnapController state on initialization.
347
+ */
348
+ preinstalledSnaps?: PreinstalledSnap[];
318
349
  };
319
350
  export declare class SnapController extends BaseController<string, SnapControllerState, SnapControllerMessenger> {
320
351
  #private;
321
352
  private readonly maxRequestTime;
322
- constructor({ closeAllConnections, messenger, state, dynamicPermissions, environmentEndowmentPermissions, excludedPermissions, idleTimeCheckInterval, maxIdleTime, maxRequestTime, fetchFunction, featureFlags, detectSnapLocation: detectSnapLocationFunction, }: SnapControllerArgs);
353
+ constructor({ closeAllConnections, messenger, state, dynamicPermissions, environmentEndowmentPermissions, excludedPermissions, idleTimeCheckInterval, maxIdleTime, maxRequestTime, fetchFunction, featureFlags, detectSnapLocation: detectSnapLocationFunction, preinstalledSnaps, }: SnapControllerArgs);
323
354
  /**
324
355
  * Checks all installed snaps against the block list and
325
356
  * blocks/unblocks snaps as appropriate. See {@link SnapController.blockSnap}
@@ -0,0 +1 @@
1
+ export declare const ALLOWED_PERMISSIONS: readonly string[];
@@ -1,6 +1,4 @@
1
1
  export * from './location';
2
2
  export * from './SnapController';
3
- export * from './endowments';
4
3
  export * from './selectors';
5
4
  export * from './registry';
6
- export * from './permissions';
@@ -1,3 +1,4 @@
1
+ import type { SnapId } from '@metamask/snaps-sdk';
1
2
  import type { SnapLocation } from './snaps';
2
3
  import { Timer } from './snaps/Timer';
3
4
  /**
@@ -134,4 +135,122 @@ export declare type Mutable<Type extends Record<string, unknown>, TargetKey exte
134
135
  * @returns The array of files as {@link VirtualFile}s.
135
136
  */
136
137
  export declare function getSnapFiles(location: SnapLocation, files?: string[] | undefined): Promise<import("@metamask/snaps-utils").VirtualFile<unknown>[]>;
138
+ /**
139
+ * Fetch the Snap manifest, source code, and any other files from the given
140
+ * location.
141
+ *
142
+ * @param snapId - The ID of the Snap to fetch.
143
+ * @param location - The location of the Snap.
144
+ * @returns The Snap files and location.
145
+ * @throws If the Snap files are invalid, or if the Snap could not be fetched.
146
+ */
147
+ export declare function fetchSnap(snapId: SnapId, location: SnapLocation): Promise<{
148
+ manifest: import("@metamask/snaps-utils").VirtualFile<{
149
+ description: string;
150
+ version: import("@metamask/utils").SemVerVersion;
151
+ source: {
152
+ location: {
153
+ npm: {
154
+ registry: "https://registry.npmjs.org" | "https://registry.npmjs.org/";
155
+ filePath: string;
156
+ packageName: string;
157
+ iconPath?: string | undefined;
158
+ };
159
+ };
160
+ shasum: string;
161
+ files?: string[] | undefined;
162
+ locales?: string[] | undefined;
163
+ };
164
+ proposedName: string;
165
+ initialPermissions: {
166
+ snap_dialog?: {} | undefined;
167
+ snap_getBip32Entropy?: {
168
+ path: string[];
169
+ curve: "ed25519" | "secp256k1";
170
+ }[] | undefined;
171
+ snap_getBip32PublicKey?: {
172
+ path: string[];
173
+ curve: "ed25519" | "secp256k1";
174
+ }[] | undefined;
175
+ snap_getBip44Entropy?: {
176
+ coinType: number;
177
+ }[] | undefined;
178
+ snap_getEntropy?: {} | undefined;
179
+ snap_getLocale?: {} | undefined;
180
+ snap_manageAccounts?: {} | undefined;
181
+ snap_manageState?: {} | undefined;
182
+ snap_notify?: {} | undefined;
183
+ wallet_snap?: Record<string, {
184
+ version?: string | undefined;
185
+ }> | undefined;
186
+ 'endowment:cronjob'?: {
187
+ jobs: {
188
+ request: {
189
+ method: string;
190
+ id?: string | number | null | undefined;
191
+ jsonrpc?: "2.0" | undefined;
192
+ params?: Record<string, import("@metamask/snaps-sdk").Json> | import("@metamask/snaps-sdk").Json[] | undefined;
193
+ };
194
+ expression: string;
195
+ }[];
196
+ maxRequestTime?: number | undefined;
197
+ } | undefined;
198
+ 'endowment:ethereum-provider'?: {} | undefined;
199
+ 'endowment:keyring'?: {
200
+ allowedOrigins?: string[] | undefined;
201
+ maxRequestTime?: number | undefined;
202
+ } | undefined;
203
+ 'endowment:lifecycle-hooks'?: {
204
+ maxRequestTime?: number | undefined;
205
+ } | undefined;
206
+ 'endowment:name-lookup'?: {
207
+ chains?: `${string}:${string}`[] | undefined;
208
+ maxRequestTime?: number | undefined;
209
+ matchers?: {
210
+ tlds: string[];
211
+ } | {
212
+ schemes: string[];
213
+ } | {
214
+ tlds: string[];
215
+ schemes: string[];
216
+ } | undefined;
217
+ } | undefined;
218
+ 'endowment:network-access'?: {} | undefined;
219
+ 'endowment:page-home'?: {
220
+ maxRequestTime?: number | undefined;
221
+ } | undefined;
222
+ 'endowment:rpc'?: {
223
+ dapps?: boolean | undefined;
224
+ snaps?: boolean | undefined;
225
+ allowedOrigins?: string[] | undefined;
226
+ } | undefined;
227
+ 'endowment:signature-insight'?: {
228
+ maxRequestTime?: number | undefined;
229
+ allowSignatureOrigin?: boolean | undefined;
230
+ } | undefined;
231
+ 'endowment:transaction-insight'?: {
232
+ maxRequestTime?: number | undefined;
233
+ allowTransactionOrigin?: boolean | undefined;
234
+ } | undefined;
235
+ 'endowment:webassembly'?: {} | undefined;
236
+ };
237
+ manifestVersion: "0.1";
238
+ repository?: {
239
+ type: string;
240
+ url: string;
241
+ } | undefined;
242
+ initialConnections?: Record<string & URL, {}> | undefined;
243
+ $schema?: string | undefined;
244
+ }>;
245
+ sourceCode: import("@metamask/snaps-utils").VirtualFile<unknown>;
246
+ svgIcon: import("@metamask/snaps-utils").VirtualFile<unknown> | undefined;
247
+ auxiliaryFiles: import("@metamask/snaps-utils").VirtualFile<unknown>[];
248
+ localizationFiles: import("@metamask/snaps-utils").VirtualFile<{
249
+ locale: string;
250
+ messages: Record<string, {
251
+ message: string;
252
+ description?: string | undefined;
253
+ }>;
254
+ }>[];
255
+ }>;
137
256
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/snaps-controllers",
3
- "version": "4.0.0",
3
+ "version": "5.0.0",
4
4
  "description": "Controllers for MetaMask Snaps.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -42,19 +42,19 @@
42
42
  "lint:dependencies": "depcheck"
43
43
  },
44
44
  "dependencies": {
45
- "@metamask/approval-controller": "^5.1.1",
46
- "@metamask/base-controller": "^4.0.0",
47
- "@metamask/json-rpc-engine": "^7.3.1",
45
+ "@metamask/approval-controller": "^5.1.2",
46
+ "@metamask/base-controller": "^4.1.0",
47
+ "@metamask/json-rpc-engine": "^7.3.2",
48
48
  "@metamask/object-multiplex": "^2.0.0",
49
- "@metamask/permission-controller": "^7.1.0",
50
- "@metamask/phishing-controller": "^8.0.1",
51
- "@metamask/post-message-stream": "^7.0.0",
49
+ "@metamask/permission-controller": "^8.0.0",
50
+ "@metamask/phishing-controller": "^8.0.2",
51
+ "@metamask/post-message-stream": "^8.0.0",
52
52
  "@metamask/rpc-errors": "^6.1.0",
53
53
  "@metamask/snaps-registry": "^3.0.0",
54
- "@metamask/snaps-rpc-methods": "^4.1.0",
55
- "@metamask/snaps-sdk": "^1.3.2",
56
- "@metamask/snaps-utils": "^5.1.2",
57
- "@metamask/utils": "^8.2.1",
54
+ "@metamask/snaps-rpc-methods": "^6.0.0",
55
+ "@metamask/snaps-sdk": "^2.0.0",
56
+ "@metamask/snaps-utils": "^6.0.0",
57
+ "@metamask/utils": "^8.3.0",
58
58
  "@xstate/fsm": "^2.0.0",
59
59
  "browserify-zlib": "^0.2.0",
60
60
  "concat-stream": "^2.0.0",
@@ -64,12 +64,12 @@
64
64
  "nanoid": "^3.1.31",
65
65
  "readable-stream": "^3.6.2",
66
66
  "readable-web-to-node-stream": "^3.0.2",
67
- "tar-stream": "^3.1.6"
67
+ "tar-stream": "^3.1.7"
68
68
  },
69
69
  "devDependencies": {
70
70
  "@esbuild-plugins/node-globals-polyfill": "^0.2.3",
71
71
  "@esbuild-plugins/node-modules-polyfill": "^0.2.2",
72
- "@lavamoat/allow-scripts": "^2.5.1",
72
+ "@lavamoat/allow-scripts": "^3.0.0",
73
73
  "@metamask/auto-changelog": "^3.4.4",
74
74
  "@metamask/eslint-config": "^12.1.0",
75
75
  "@metamask/eslint-config-jest": "^12.1.0",
@@ -125,7 +125,7 @@
125
125
  "webdriverio": "^8.19.0"
126
126
  },
127
127
  "peerDependencies": {
128
- "@metamask/snaps-execution-environments": "^3.4.3"
128
+ "@metamask/snaps-execution-environments": "^4.0.0"
129
129
  },
130
130
  "peerDependenciesMeta": {
131
131
  "@metamask/snaps-execution-environments": {
@@ -1,100 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- cronjobEndowmentBuilder: function() {
13
- return cronjobEndowmentBuilder;
14
- },
15
- getCronjobCaveatMapper: function() {
16
- return getCronjobCaveatMapper;
17
- },
18
- getCronjobCaveatJobs: function() {
19
- return getCronjobCaveatJobs;
20
- },
21
- validateCronjobCaveat: function() {
22
- return validateCronjobCaveat;
23
- },
24
- cronjobCaveatSpecifications: function() {
25
- return cronjobCaveatSpecifications;
26
- }
27
- });
28
- const _permissioncontroller = require("@metamask/permission-controller");
29
- const _rpcerrors = require("@metamask/rpc-errors");
30
- const _snapsutils = require("@metamask/snaps-utils");
31
- const _utils = require("@metamask/utils");
32
- const _enum = require("./enum");
33
- const permissionName = _enum.SnapEndowments.Cronjob;
34
- /**
35
- * `endowment:cronjob` returns nothing; it is intended to be used as a flag to determine whether the snap wants to run cronjobs.
36
- *
37
- * @param _builderOptions - Optional specification builder options.
38
- * @returns The specification for the cronjob endowment.
39
- */ const specificationBuilder = (_builderOptions)=>{
40
- return {
41
- permissionType: _permissioncontroller.PermissionType.Endowment,
42
- targetName: permissionName,
43
- allowedCaveats: [
44
- _snapsutils.SnapCaveatType.SnapCronjob
45
- ],
46
- endowmentGetter: (_getterOptions)=>undefined,
47
- subjectTypes: [
48
- _permissioncontroller.SubjectType.Snap
49
- ]
50
- };
51
- };
52
- const cronjobEndowmentBuilder = Object.freeze({
53
- targetName: permissionName,
54
- specificationBuilder
55
- });
56
- function getCronjobCaveatMapper(value) {
57
- return {
58
- caveats: [
59
- {
60
- type: _snapsutils.SnapCaveatType.SnapCronjob,
61
- value
62
- }
63
- ]
64
- };
65
- }
66
- function getCronjobCaveatJobs(permission) {
67
- if (!permission?.caveats) {
68
- return null;
69
- }
70
- (0, _utils.assert)(permission.caveats.length === 1);
71
- (0, _utils.assert)(permission.caveats[0].type === _snapsutils.SnapCaveatType.SnapCronjob);
72
- const caveat = permission.caveats[0];
73
- return (caveat.value?.jobs) ?? null;
74
- }
75
- function validateCronjobCaveat(caveat) {
76
- if (!(0, _utils.hasProperty)(caveat, 'value') || !(0, _utils.isPlainObject)(caveat.value)) {
77
- throw _rpcerrors.rpcErrors.invalidParams({
78
- message: 'Expected a plain object.'
79
- });
80
- }
81
- const { value } = caveat;
82
- if (!(0, _utils.hasProperty)(value, 'jobs') || !(0, _utils.isPlainObject)(value)) {
83
- throw _rpcerrors.rpcErrors.invalidParams({
84
- message: 'Expected a plain object.'
85
- });
86
- }
87
- if (!(0, _snapsutils.isCronjobSpecificationArray)(value.jobs)) {
88
- throw _rpcerrors.rpcErrors.invalidParams({
89
- message: 'Expected a valid cronjob specification array.'
90
- });
91
- }
92
- }
93
- const cronjobCaveatSpecifications = {
94
- [_snapsutils.SnapCaveatType.SnapCronjob]: Object.freeze({
95
- type: _snapsutils.SnapCaveatType.SnapCronjob,
96
- validator: (caveat)=>validateCronjobCaveat(caveat)
97
- })
98
- };
99
-
100
- //# sourceMappingURL=cronjob.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/snaps/endowments/cronjob.ts"],"sourcesContent":["import type {\n PermissionSpecificationBuilder,\n EndowmentGetterParams,\n ValidPermissionSpecification,\n PermissionConstraint,\n Caveat,\n CaveatSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport { PermissionType, SubjectType } from '@metamask/permission-controller';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type { CronjobSpecification } from '@metamask/snaps-utils';\nimport {\n SnapCaveatType,\n isCronjobSpecificationArray,\n} from '@metamask/snaps-utils';\nimport type { Json, NonEmptyArray } from '@metamask/utils';\nimport { assert, hasProperty, isPlainObject } from '@metamask/utils';\n\nimport { SnapEndowments } from './enum';\n\nconst permissionName = SnapEndowments.Cronjob;\n\ntype CronjobEndowmentSpecification = ValidPermissionSpecification<{\n permissionType: PermissionType.Endowment;\n targetName: typeof permissionName;\n endowmentGetter: (_options?: any) => undefined;\n allowedCaveats: Readonly<NonEmptyArray<string>> | null;\n}>;\n\n/**\n * `endowment:cronjob` returns nothing; it is intended to be used as a flag to determine whether the snap wants to run cronjobs.\n *\n * @param _builderOptions - Optional specification builder options.\n * @returns The specification for the cronjob endowment.\n */\nconst specificationBuilder: PermissionSpecificationBuilder<\n PermissionType.Endowment,\n any,\n CronjobEndowmentSpecification\n> = (_builderOptions?: any) => {\n return {\n permissionType: PermissionType.Endowment,\n targetName: permissionName,\n allowedCaveats: [SnapCaveatType.SnapCronjob],\n endowmentGetter: (_getterOptions?: EndowmentGetterParams) => undefined,\n subjectTypes: [SubjectType.Snap],\n };\n};\n\nexport const cronjobEndowmentBuilder = Object.freeze({\n targetName: permissionName,\n specificationBuilder,\n} as const);\n\n/**\n * Map a raw value from the `initialPermissions` to a caveat specification.\n * Note that this function does not do any validation, that's handled by the\n * PermissionsController when the permission is requested.\n *\n * @param value - The raw value from the `initialPermissions`.\n * @returns The caveat specification.\n */\nexport function getCronjobCaveatMapper(\n value: Json,\n): Pick<PermissionConstraint, 'caveats'> {\n return {\n caveats: [\n {\n type: SnapCaveatType.SnapCronjob,\n value,\n },\n ],\n };\n}\n\n/**\n * Getter function to get the cronjobs from a permission.\n *\n * This does basic validation of the caveat, but does not validate the type or\n * value of the namespaces object itself, as this is handled by the\n * `PermissionsController` when the permission is requested.\n *\n * @param permission - The permission to get the keyring namespaces from.\n * @returns The cronjobs, or `null` if the permission does not have a\n * cronjob caveat.\n */\nexport function getCronjobCaveatJobs(\n permission?: PermissionConstraint,\n): CronjobSpecification[] | null {\n if (!permission?.caveats) {\n return null;\n }\n\n assert(permission.caveats.length === 1);\n assert(permission.caveats[0].type === SnapCaveatType.SnapCronjob);\n\n const caveat = permission.caveats[0] as Caveat<string, { jobs: Json[] }>;\n\n return (caveat.value?.jobs as CronjobSpecification[]) ?? null;\n}\n\n/**\n * Validate the cronjob specification values associated with a caveat.\n * This validates that the value is a non-empty array with valid\n * cronjob expression and request object.\n *\n * @param caveat - The caveat to validate.\n * @throws If the value is invalid.\n */\nexport function validateCronjobCaveat(caveat: Caveat<string, any>) {\n if (!hasProperty(caveat, 'value') || !isPlainObject(caveat.value)) {\n throw rpcErrors.invalidParams({\n message: 'Expected a plain object.',\n });\n }\n\n const { value } = caveat;\n\n if (!hasProperty(value, 'jobs') || !isPlainObject(value)) {\n throw rpcErrors.invalidParams({\n message: 'Expected a plain object.',\n });\n }\n\n if (!isCronjobSpecificationArray(value.jobs)) {\n throw rpcErrors.invalidParams({\n message: 'Expected a valid cronjob specification array.',\n });\n }\n}\n\n/**\n * Caveat specification for the Cronjob.\n */\nexport const cronjobCaveatSpecifications: Record<\n SnapCaveatType.SnapCronjob,\n CaveatSpecificationConstraint\n> = {\n [SnapCaveatType.SnapCronjob]: Object.freeze({\n type: SnapCaveatType.SnapCronjob,\n validator: (caveat) => validateCronjobCaveat(caveat),\n }),\n};\n"],"names":["cronjobEndowmentBuilder","getCronjobCaveatMapper","getCronjobCaveatJobs","validateCronjobCaveat","cronjobCaveatSpecifications","permissionName","SnapEndowments","Cronjob","specificationBuilder","_builderOptions","permissionType","PermissionType","Endowment","targetName","allowedCaveats","SnapCaveatType","SnapCronjob","endowmentGetter","_getterOptions","undefined","subjectTypes","SubjectType","Snap","Object","freeze","value","caveats","type","permission","assert","length","caveat","jobs","hasProperty","isPlainObject","rpcErrors","invalidParams","message","isCronjobSpecificationArray","validator"],"mappings":";;;;;;;;;;;IAiDaA,uBAAuB;eAAvBA;;IAaGC,sBAAsB;eAAtBA;;IAwBAC,oBAAoB;eAApBA;;IAuBAC,qBAAqB;eAArBA;;IAyBHC,2BAA2B;eAA3BA;;;sCA9H+B;2BAClB;4BAKnB;uBAE4C;sBAEpB;AAE/B,MAAMC,iBAAiBC,oBAAc,CAACC,OAAO;AAS7C;;;;;CAKC,GACD,MAAMC,uBAIF,CAACC;IACH,OAAO;QACLC,gBAAgBC,oCAAc,CAACC,SAAS;QACxCC,YAAYR;QACZS,gBAAgB;YAACC,0BAAc,CAACC,WAAW;SAAC;QAC5CC,iBAAiB,CAACC,iBAA2CC;QAC7DC,cAAc;YAACC,iCAAW,CAACC,IAAI;SAAC;IAClC;AACF;AAEO,MAAMtB,0BAA0BuB,OAAOC,MAAM,CAAC;IACnDX,YAAYR;IACZG;AACF;AAUO,SAASP,uBACdwB,KAAW;IAEX,OAAO;QACLC,SAAS;YACP;gBACEC,MAAMZ,0BAAc,CAACC,WAAW;gBAChCS;YACF;SACD;IACH;AACF;AAaO,SAASvB,qBACd0B,UAAiC;IAEjC,IAAI,CAACA,YAAYF,SAAS;QACxB,OAAO;IACT;IAEAG,IAAAA,aAAM,EAACD,WAAWF,OAAO,CAACI,MAAM,KAAK;IACrCD,IAAAA,aAAM,EAACD,WAAWF,OAAO,CAAC,EAAE,CAACC,IAAI,KAAKZ,0BAAc,CAACC,WAAW;IAEhE,MAAMe,SAASH,WAAWF,OAAO,CAAC,EAAE;IAEpC,OAAO,CAACK,OAAON,KAAK,EAAEO,IAA8B,KAAK;AAC3D;AAUO,SAAS7B,sBAAsB4B,MAA2B;IAC/D,IAAI,CAACE,IAAAA,kBAAW,EAACF,QAAQ,YAAY,CAACG,IAAAA,oBAAa,EAACH,OAAON,KAAK,GAAG;QACjE,MAAMU,oBAAS,CAACC,aAAa,CAAC;YAC5BC,SAAS;QACX;IACF;IAEA,MAAM,EAAEZ,KAAK,EAAE,GAAGM;IAElB,IAAI,CAACE,IAAAA,kBAAW,EAACR,OAAO,WAAW,CAACS,IAAAA,oBAAa,EAACT,QAAQ;QACxD,MAAMU,oBAAS,CAACC,aAAa,CAAC;YAC5BC,SAAS;QACX;IACF;IAEA,IAAI,CAACC,IAAAA,uCAA2B,EAACb,MAAMO,IAAI,GAAG;QAC5C,MAAMG,oBAAS,CAACC,aAAa,CAAC;YAC5BC,SAAS;QACX;IACF;AACF;AAKO,MAAMjC,8BAGT;IACF,CAACW,0BAAc,CAACC,WAAW,CAAC,EAAEO,OAAOC,MAAM,CAAC;QAC1CG,MAAMZ,0BAAc,CAACC,WAAW;QAChCuB,WAAW,CAACR,SAAW5B,sBAAsB4B;IAC/C;AACF"}
@@ -1,25 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "SnapEndowments", {
6
- enumerable: true,
7
- get: function() {
8
- return SnapEndowments;
9
- }
10
- });
11
- var SnapEndowments;
12
- (function(SnapEndowments) {
13
- SnapEndowments["NetworkAccess"] = 'endowment:network-access';
14
- SnapEndowments["TransactionInsight"] = 'endowment:transaction-insight';
15
- SnapEndowments["Cronjob"] = 'endowment:cronjob';
16
- SnapEndowments["EthereumProvider"] = 'endowment:ethereum-provider';
17
- SnapEndowments["Rpc"] = 'endowment:rpc';
18
- SnapEndowments["WebAssemblyAccess"] = 'endowment:webassembly';
19
- SnapEndowments["NameLookup"] = 'endowment:name-lookup';
20
- SnapEndowments["LifecycleHooks"] = 'endowment:lifecycle-hooks';
21
- SnapEndowments["Keyring"] = 'endowment:keyring';
22
- SnapEndowments["HomePage"] = 'endowment:page-home';
23
- })(SnapEndowments || (SnapEndowments = {}));
24
-
25
- //# sourceMappingURL=enum.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/snaps/endowments/enum.ts"],"sourcesContent":["export enum SnapEndowments {\n NetworkAccess = 'endowment:network-access',\n TransactionInsight = 'endowment:transaction-insight',\n Cronjob = 'endowment:cronjob',\n EthereumProvider = 'endowment:ethereum-provider',\n Rpc = 'endowment:rpc',\n WebAssemblyAccess = 'endowment:webassembly',\n NameLookup = 'endowment:name-lookup',\n LifecycleHooks = 'endowment:lifecycle-hooks',\n Keyring = 'endowment:keyring',\n HomePage = 'endowment:page-home',\n}\n"],"names":["SnapEndowments","NetworkAccess","TransactionInsight","Cronjob","EthereumProvider","Rpc","WebAssemblyAccess","NameLookup","LifecycleHooks","Keyring","HomePage"],"mappings":";;;;;;;;;;IAAO;UAAKA,cAAc;IAAdA,eACVC,mBAAgB;IADND,eAEVE,wBAAqB;IAFXF,eAGVG,aAAU;IAHAH,eAIVI,sBAAmB;IAJTJ,eAKVK,SAAM;IALIL,eAMVM,uBAAoB;IANVN,eAOVO,gBAAa;IAPHP,eAQVQ,oBAAiB;IARPR,eASVS,aAAU;IATAT,eAUVU,cAAW;GAVDV,mBAAAA"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "ethereumProviderEndowmentBuilder", {
6
- enumerable: true,
7
- get: function() {
8
- return ethereumProviderEndowmentBuilder;
9
- }
10
- });
11
- const _permissioncontroller = require("@metamask/permission-controller");
12
- const _enum = require("./enum");
13
- const permissionName = _enum.SnapEndowments.EthereumProvider;
14
- /**
15
- * `endowment:ethereum-provider` returns the name of the ethereum global browser API.
16
- * This is intended to populate the endowments of the
17
- * SES Compartment in which a Snap executes.
18
- *
19
- * This populates the global scope with an EIP-1193 provider, which DOES NOT implement all legacy functionality exposed to dapps.
20
- *
21
- * @param _builderOptions - Optional specification builder options.
22
- * @returns The specification for the network endowment.
23
- */ const specificationBuilder = (_builderOptions)=>{
24
- return {
25
- permissionType: _permissioncontroller.PermissionType.Endowment,
26
- targetName: permissionName,
27
- allowedCaveats: null,
28
- endowmentGetter: (_getterOptions)=>{
29
- return [
30
- 'ethereum'
31
- ];
32
- },
33
- subjectTypes: [
34
- _permissioncontroller.SubjectType.Snap
35
- ]
36
- };
37
- };
38
- const ethereumProviderEndowmentBuilder = Object.freeze({
39
- targetName: permissionName,
40
- specificationBuilder
41
- });
42
-
43
- //# sourceMappingURL=ethereum-provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/snaps/endowments/ethereum-provider.ts"],"sourcesContent":["import type {\n EndowmentGetterParams,\n PermissionSpecificationBuilder,\n ValidPermissionSpecification,\n} from '@metamask/permission-controller';\nimport { PermissionType, SubjectType } from '@metamask/permission-controller';\n\nimport { SnapEndowments } from './enum';\n\nconst permissionName = SnapEndowments.EthereumProvider;\n\ntype EthereumProviderEndowmentSpecification = ValidPermissionSpecification<{\n permissionType: PermissionType.Endowment;\n targetName: typeof permissionName;\n endowmentGetter: (_options?: any) => ['ethereum'];\n allowedCaveats: null;\n}>;\n\n/**\n * `endowment:ethereum-provider` returns the name of the ethereum global browser API.\n * This is intended to populate the endowments of the\n * SES Compartment in which a Snap executes.\n *\n * This populates the global scope with an EIP-1193 provider, which DOES NOT implement all legacy functionality exposed to dapps.\n *\n * @param _builderOptions - Optional specification builder options.\n * @returns The specification for the network endowment.\n */\nconst specificationBuilder: PermissionSpecificationBuilder<\n PermissionType.Endowment,\n any,\n EthereumProviderEndowmentSpecification\n> = (_builderOptions?: any) => {\n return {\n permissionType: PermissionType.Endowment,\n targetName: permissionName,\n allowedCaveats: null,\n endowmentGetter: (_getterOptions?: EndowmentGetterParams) => {\n return ['ethereum'];\n },\n subjectTypes: [SubjectType.Snap],\n };\n};\n\nexport const ethereumProviderEndowmentBuilder = Object.freeze({\n targetName: permissionName,\n specificationBuilder,\n} as const);\n"],"names":["ethereumProviderEndowmentBuilder","permissionName","SnapEndowments","EthereumProvider","specificationBuilder","_builderOptions","permissionType","PermissionType","Endowment","targetName","allowedCaveats","endowmentGetter","_getterOptions","subjectTypes","SubjectType","Snap","Object","freeze"],"mappings":";;;;+BA4CaA;;;eAAAA;;;sCAvC+B;sBAEb;AAE/B,MAAMC,iBAAiBC,oBAAc,CAACC,gBAAgB;AAStD;;;;;;;;;CASC,GACD,MAAMC,uBAIF,CAACC;IACH,OAAO;QACLC,gBAAgBC,oCAAc,CAACC,SAAS;QACxCC,YAAYR;QACZS,gBAAgB;QAChBC,iBAAiB,CAACC;YAChB,OAAO;gBAAC;aAAW;QACrB;QACAC,cAAc;YAACC,iCAAW,CAACC,IAAI;SAAC;IAClC;AACF;AAEO,MAAMf,mCAAmCgB,OAAOC,MAAM,CAAC;IAC5DR,YAAYR;IACZG;AACF"}
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "homePageEndowmentBuilder", {
6
- enumerable: true,
7
- get: function() {
8
- return homePageEndowmentBuilder;
9
- }
10
- });
11
- const _permissioncontroller = require("@metamask/permission-controller");
12
- const _enum = require("./enum");
13
- const permissionName = _enum.SnapEndowments.HomePage;
14
- /**
15
- * `endowment:page-home` returns nothing; it is intended to be used as a
16
- * flag by the snap controller to detect whether the snap has the capability to
17
- * use the snap home page feature.
18
- *
19
- * @param _builderOptions - Optional specification builder options.
20
- * @returns The specification for the `snap-pages` endowment.
21
- */ const specificationBuilder = (_builderOptions)=>{
22
- return {
23
- permissionType: _permissioncontroller.PermissionType.Endowment,
24
- targetName: permissionName,
25
- allowedCaveats: null,
26
- endowmentGetter: (_getterOptions)=>undefined,
27
- subjectTypes: [
28
- _permissioncontroller.SubjectType.Snap
29
- ]
30
- };
31
- };
32
- const homePageEndowmentBuilder = Object.freeze({
33
- targetName: permissionName,
34
- specificationBuilder
35
- });
36
-
37
- //# sourceMappingURL=home-page.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/snaps/endowments/home-page.ts"],"sourcesContent":["import type {\n PermissionSpecificationBuilder,\n EndowmentGetterParams,\n ValidPermissionSpecification,\n} from '@metamask/permission-controller';\nimport { PermissionType, SubjectType } from '@metamask/permission-controller';\nimport type { NonEmptyArray } from '@metamask/utils';\n\nimport { SnapEndowments } from './enum';\n\nconst permissionName = SnapEndowments.HomePage;\n\ntype HomePageEndowmentSpecification = ValidPermissionSpecification<{\n permissionType: PermissionType.Endowment;\n targetName: typeof permissionName;\n endowmentGetter: (_options?: EndowmentGetterParams) => undefined;\n allowedCaveats: Readonly<NonEmptyArray<string>> | null;\n}>;\n\n/**\n * `endowment:page-home` returns nothing; it is intended to be used as a\n * flag by the snap controller to detect whether the snap has the capability to\n * use the snap home page feature.\n *\n * @param _builderOptions - Optional specification builder options.\n * @returns The specification for the `snap-pages` endowment.\n */\nconst specificationBuilder: PermissionSpecificationBuilder<\n PermissionType.Endowment,\n any,\n HomePageEndowmentSpecification\n> = (_builderOptions?: unknown) => {\n return {\n permissionType: PermissionType.Endowment,\n targetName: permissionName,\n allowedCaveats: null,\n endowmentGetter: (_getterOptions?: EndowmentGetterParams) => undefined,\n subjectTypes: [SubjectType.Snap],\n };\n};\n\nexport const homePageEndowmentBuilder = Object.freeze({\n targetName: permissionName,\n specificationBuilder,\n} as const);\n"],"names":["homePageEndowmentBuilder","permissionName","SnapEndowments","HomePage","specificationBuilder","_builderOptions","permissionType","PermissionType","Endowment","targetName","allowedCaveats","endowmentGetter","_getterOptions","undefined","subjectTypes","SubjectType","Snap","Object","freeze"],"mappings":";;;;+BAyCaA;;;eAAAA;;;sCApC+B;sBAGb;AAE/B,MAAMC,iBAAiBC,oBAAc,CAACC,QAAQ;AAS9C;;;;;;;CAOC,GACD,MAAMC,uBAIF,CAACC;IACH,OAAO;QACLC,gBAAgBC,oCAAc,CAACC,SAAS;QACxCC,YAAYR;QACZS,gBAAgB;QAChBC,iBAAiB,CAACC,iBAA2CC;QAC7DC,cAAc;YAACC,iCAAW,CAACC,IAAI;SAAC;IAClC;AACF;AAEO,MAAMhB,2BAA2BiB,OAAOC,MAAM,CAAC;IACpDT,YAAYR;IACZG;AACF"}
@@ -1,99 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- endowmentPermissionBuilders: function() {
13
- return endowmentPermissionBuilders;
14
- },
15
- endowmentCaveatSpecifications: function() {
16
- return endowmentCaveatSpecifications;
17
- },
18
- endowmentCaveatMappers: function() {
19
- return endowmentCaveatMappers;
20
- },
21
- handlerEndowments: function() {
22
- return handlerEndowments;
23
- },
24
- getRpcCaveatOrigins: function() {
25
- return _rpc.getRpcCaveatOrigins;
26
- },
27
- getTransactionOriginCaveat: function() {
28
- return _transactioninsight.getTransactionOriginCaveat;
29
- },
30
- getChainIdsCaveat: function() {
31
- return _namelookup.getChainIdsCaveat;
32
- },
33
- getKeyringCaveatOrigins: function() {
34
- return _keyring.getKeyringCaveatOrigins;
35
- }
36
- });
37
- const _snapsutils = require("@metamask/snaps-utils");
38
- const _cronjob = require("./cronjob");
39
- const _ethereumprovider = require("./ethereum-provider");
40
- const _homepage = require("./home-page");
41
- const _keyring = require("./keyring");
42
- const _lifecyclehooks = require("./lifecycle-hooks");
43
- const _namelookup = require("./name-lookup");
44
- const _networkaccess = require("./network-access");
45
- const _rpc = require("./rpc");
46
- const _transactioninsight = require("./transaction-insight");
47
- const _webassembly = require("./web-assembly");
48
- _export_star(require("./enum"), exports);
49
- function _export_star(from, to) {
50
- Object.keys(from).forEach(function(k) {
51
- if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
52
- Object.defineProperty(to, k, {
53
- enumerable: true,
54
- get: function() {
55
- return from[k];
56
- }
57
- });
58
- }
59
- });
60
- return from;
61
- }
62
- const endowmentPermissionBuilders = {
63
- [_networkaccess.networkAccessEndowmentBuilder.targetName]: _networkaccess.networkAccessEndowmentBuilder,
64
- [_transactioninsight.transactionInsightEndowmentBuilder.targetName]: _transactioninsight.transactionInsightEndowmentBuilder,
65
- [_cronjob.cronjobEndowmentBuilder.targetName]: _cronjob.cronjobEndowmentBuilder,
66
- [_ethereumprovider.ethereumProviderEndowmentBuilder.targetName]: _ethereumprovider.ethereumProviderEndowmentBuilder,
67
- [_rpc.rpcEndowmentBuilder.targetName]: _rpc.rpcEndowmentBuilder,
68
- [_webassembly.webAssemblyEndowmentBuilder.targetName]: _webassembly.webAssemblyEndowmentBuilder,
69
- [_namelookup.nameLookupEndowmentBuilder.targetName]: _namelookup.nameLookupEndowmentBuilder,
70
- [_lifecyclehooks.lifecycleHooksEndowmentBuilder.targetName]: _lifecyclehooks.lifecycleHooksEndowmentBuilder,
71
- [_keyring.keyringEndowmentBuilder.targetName]: _keyring.keyringEndowmentBuilder,
72
- [_homepage.homePageEndowmentBuilder.targetName]: _homepage.homePageEndowmentBuilder
73
- };
74
- const endowmentCaveatSpecifications = {
75
- ..._cronjob.cronjobCaveatSpecifications,
76
- ..._transactioninsight.transactionInsightCaveatSpecifications,
77
- ..._rpc.rpcCaveatSpecifications,
78
- ..._namelookup.nameLookupCaveatSpecifications,
79
- ..._keyring.keyringCaveatSpecifications
80
- };
81
- const endowmentCaveatMappers = {
82
- [_cronjob.cronjobEndowmentBuilder.targetName]: _cronjob.getCronjobCaveatMapper,
83
- [_transactioninsight.transactionInsightEndowmentBuilder.targetName]: _transactioninsight.getTransactionInsightCaveatMapper,
84
- [_rpc.rpcEndowmentBuilder.targetName]: _rpc.getRpcCaveatMapper,
85
- [_namelookup.nameLookupEndowmentBuilder.targetName]: _namelookup.getNameLookupCaveatMapper,
86
- [_keyring.keyringEndowmentBuilder.targetName]: _keyring.getKeyringCaveatMapper
87
- };
88
- const handlerEndowments = {
89
- [_snapsutils.HandlerType.OnRpcRequest]: _rpc.rpcEndowmentBuilder.targetName,
90
- [_snapsutils.HandlerType.OnTransaction]: _transactioninsight.transactionInsightEndowmentBuilder.targetName,
91
- [_snapsutils.HandlerType.OnCronjob]: _cronjob.cronjobEndowmentBuilder.targetName,
92
- [_snapsutils.HandlerType.OnNameLookup]: _namelookup.nameLookupEndowmentBuilder.targetName,
93
- [_snapsutils.HandlerType.OnInstall]: _lifecyclehooks.lifecycleHooksEndowmentBuilder.targetName,
94
- [_snapsutils.HandlerType.OnUpdate]: _lifecyclehooks.lifecycleHooksEndowmentBuilder.targetName,
95
- [_snapsutils.HandlerType.OnKeyringRequest]: _keyring.keyringEndowmentBuilder.targetName,
96
- [_snapsutils.HandlerType.OnHomePage]: _homepage.homePageEndowmentBuilder.targetName
97
- };
98
-
99
- //# sourceMappingURL=index.js.map