@metamask/snaps-simulation 4.1.2 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [4.1.3]
11
+
12
+ ### Changed
13
+
14
+ - Bump `@metamask/messenger` from `^0.3.0` to `^1.1.0` ([#3930](https://github.com/MetaMask/snaps/pull/3930), [#3934](https://github.com/MetaMask/snaps/pull/3934))
15
+ - Bump `@metamask/permission-controller` from `^12.2.1` to `^12.3.0` ([#3930](https://github.com/MetaMask/snaps/pull/3930))
16
+
10
17
  ## [4.1.2]
11
18
 
12
19
  ### Changed
@@ -293,7 +300,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
293
300
 
294
301
  - Initial release of `@metamask/snaps-simulation` package ([#2727](https://github.com/MetaMask/snaps/pull/2727))
295
302
 
296
- [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-simulation@4.1.2...HEAD
303
+ [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-simulation@4.1.3...HEAD
304
+ [4.1.3]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-simulation@4.1.2...@metamask/snaps-simulation@4.1.3
297
305
  [4.1.2]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-simulation@4.1.1...@metamask/snaps-simulation@4.1.2
298
306
  [4.1.1]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-simulation@4.1.0...@metamask/snaps-simulation@4.1.1
299
307
  [4.1.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-simulation@4.0.0...@metamask/snaps-simulation@4.1.0
@@ -1 +1 @@
1
- {"version":3,"file":"controllers.cjs","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n caip25CaveatBuilder,\n Caip25CaveatType,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n MessengerActions,\n MessengerEvents,\n MockAnyNamespace,\n} from '@metamask/messenger';\nimport { Messenger } from '@metamask/messenger';\nimport type {\n CaveatSpecificationConstraint,\n PermissionControllerMessenger,\n PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport {\n PermissionController,\n SubjectMetadataController,\n SubjectType,\n} from '@metamask/permission-controller';\nimport type {\n ExecutionServiceMessenger,\n SnapControllerMessenger,\n SnapInterfaceControllerMessenger,\n SnapRegistryControllerMessenger,\n} from '@metamask/snaps-controllers';\nimport { SnapInterfaceController } from '@metamask/snaps-controllers';\nimport {\n caveatSpecifications as snapsCaveatsSpecifications,\n endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications,\n processSnapPermissions,\n} from '@metamask/snaps-rpc-methods';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { SnapManifest } from '@metamask/snaps-utils';\nimport type { Hex } from '@metamask/utils';\nimport { getSafeJson } from '@metamask/utils';\n\nimport { getPermissionSpecifications } from './methods';\nimport { UNRESTRICTED_METHODS } from './methods/constants';\nimport type { SimulationOptions } from './options';\nimport type { RestrictedMiddlewareHooks } from './simulation';\nimport type { RunSagaFunction } from './store';\n\nexport type RootControllerMessenger = Messenger<\n MockAnyNamespace,\n MessengerActions<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >,\n MessengerEvents<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >\n>;\n\nexport type GetControllersOptions = {\n controllerMessenger: Messenger<any, any, any>;\n hooks: RestrictedMiddlewareHooks;\n runSaga: RunSagaFunction;\n options: SimulationOptions;\n};\n\nexport type Controllers = {\n permissionController: PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n >;\n subjectMetadataController: SubjectMetadataController;\n interfaceController: SnapInterfaceController;\n};\n\n/**\n * Get the controllers for the Snap.\n *\n * @param options - The options.\n * @returns The controllers for the Snap.\n */\nexport function getControllers(options: GetControllersOptions): Controllers {\n const { controllerMessenger } = options;\n const subjectMetadataController = new SubjectMetadataController({\n messenger: new Messenger({\n namespace: 'SubjectMetadataController',\n parent: controllerMessenger,\n }),\n subjectCacheLimit: 100,\n });\n\n const interfaceControllerMessenger: SnapInterfaceControllerMessenger =\n new Messenger({\n namespace: 'SnapInterfaceController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger: interfaceControllerMessenger,\n actions: [\n 'PhishingController:testOrigin',\n 'ApprovalController:hasRequest',\n 'ApprovalController:acceptRequest',\n 'AccountsController:getAccountByAddress',\n 'AccountsController:getSelectedMultichainAccount',\n 'AccountsController:listMultichainAccounts',\n 'MultichainAssetsController:getState',\n 'PermissionController:hasPermission',\n ],\n events: ['NotificationServicesController:notificationsListUpdated'],\n });\n\n const interfaceController = new SnapInterfaceController({\n messenger: interfaceControllerMessenger,\n });\n\n const permissionController = getPermissionController(options);\n\n return {\n permissionController,\n subjectMetadataController,\n interfaceController,\n };\n}\n\n/**\n * Get the permission controller for the Snap.\n *\n * @param options - The options.\n * @param options.controllerMessenger - The controller messenger.\n * @param options.options - Miscellaneous options.\n * @returns The permission controller for the Snap.\n */\nfunction getPermissionController(options: GetControllersOptions) {\n const { controllerMessenger } = options;\n const permissionSpecifications = getPermissionSpecifications(options);\n const messenger = new Messenger({\n namespace: 'PermissionController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger,\n actions: [\n `ApprovalController:addRequest`,\n `ApprovalController:hasRequest`,\n `ApprovalController:acceptRequest`,\n `ApprovalController:rejectRequest`,\n `SnapController:getPermitted`,\n `SnapController:install`,\n `SubjectMetadataController:getSubjectMetadata`,\n ],\n });\n\n const simulatedAccounts = options.options.accounts;\n const ethereumAccounts = simulatedAccounts\n .filter((account) =>\n account.scopes.some((scope) => scope.startsWith('eip155')),\n )\n .map((account) => ({\n type: 'eip155:eoa',\n address: account.address as Hex,\n }));\n\n return new PermissionController({\n messenger,\n caveatSpecifications: {\n [Caip25CaveatType]: caip25CaveatBuilder({\n findNetworkClientIdByChainId: (chainId) => chainId,\n isNonEvmScopeSupported: (_scope) => true,\n getNonEvmAccountAddresses: (scope) =>\n simulatedAccounts\n .filter((account) => account.scopes.includes(scope))\n .map((account) => `${scope}:${account.address}`),\n listAccounts: () => ethereumAccounts,\n }),\n ...snapsCaveatsSpecifications,\n ...snapsEndowmentCaveatSpecifications,\n },\n permissionSpecifications,\n unrestrictedMethods: UNRESTRICTED_METHODS,\n });\n}\n\n/**\n * Register the Snap. This sets up the Snap's permissions and subject metadata.\n *\n * @param snapId - The ID of the Snap to install.\n * @param manifest - The parsed manifest.\n * @param controllers - The controllers for the Snap.\n * @param controllers.permissionController - The permission controller.\n * @param controllers.subjectMetadataController - The subject metadata controller.\n */\nexport async function registerSnap(\n snapId: SnapId,\n manifest: SnapManifest,\n {\n permissionController,\n subjectMetadataController,\n }: Omit<Controllers, 'interfaceController'>,\n) {\n subjectMetadataController.addSubjectMetadata({\n origin: snapId,\n subjectType: SubjectType.Snap,\n });\n\n const approvedPermissions = processSnapPermissions(\n getSafeJson(manifest.initialPermissions),\n );\n\n permissionController.grantPermissions({\n approvedPermissions,\n subject: { origin: snapId },\n preserveExistingPermissions: false,\n });\n}\n"]}
1
+ {"version":3,"file":"controllers.cjs","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n caip25CaveatBuilder,\n Caip25CaveatType,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n MessengerActions,\n MessengerEvents,\n MockAnyNamespace,\n} from '@metamask/messenger';\nimport { Messenger } from '@metamask/messenger';\nimport type { PermissionControllerMessenger } from '@metamask/permission-controller';\nimport {\n PermissionController,\n SubjectMetadataController,\n SubjectType,\n} from '@metamask/permission-controller';\nimport type {\n ExecutionServiceMessenger,\n SnapControllerMessenger,\n SnapInterfaceControllerMessenger,\n SnapRegistryControllerMessenger,\n} from '@metamask/snaps-controllers';\nimport { SnapInterfaceController } from '@metamask/snaps-controllers';\nimport {\n caveatSpecifications as snapsCaveatsSpecifications,\n endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications,\n processSnapPermissions,\n} from '@metamask/snaps-rpc-methods';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { SnapManifest } from '@metamask/snaps-utils';\nimport type { Hex } from '@metamask/utils';\nimport { getSafeJson } from '@metamask/utils';\n\nimport { getPermissionSpecifications } from './methods';\nimport { UNRESTRICTED_METHODS } from './methods/constants';\nimport type { SimulationOptions } from './options';\nimport type { RestrictedMiddlewareHooks } from './simulation';\nimport type { RunSagaFunction } from './store';\n\nexport type RootControllerMessenger = Messenger<\n MockAnyNamespace,\n MessengerActions<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >,\n MessengerEvents<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >\n>;\n\nexport type GetControllersOptions = {\n controllerMessenger: Messenger<any, any, any>;\n hooks: RestrictedMiddlewareHooks;\n runSaga: RunSagaFunction;\n options: SimulationOptions;\n};\n\nexport type Controllers = {\n permissionController: PermissionController;\n subjectMetadataController: SubjectMetadataController;\n interfaceController: SnapInterfaceController;\n};\n\n/**\n * Get the controllers for the Snap.\n *\n * @param options - The options.\n * @returns The controllers for the Snap.\n */\nexport function getControllers(options: GetControllersOptions): Controllers {\n const { controllerMessenger } = options;\n const subjectMetadataController = new SubjectMetadataController({\n messenger: new Messenger({\n namespace: 'SubjectMetadataController',\n parent: controllerMessenger,\n }),\n subjectCacheLimit: 100,\n });\n\n const interfaceControllerMessenger: SnapInterfaceControllerMessenger =\n new Messenger({\n namespace: 'SnapInterfaceController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger: interfaceControllerMessenger,\n actions: [\n 'PhishingController:testOrigin',\n 'ApprovalController:hasRequest',\n 'ApprovalController:acceptRequest',\n 'AccountsController:getAccountByAddress',\n 'AccountsController:getSelectedMultichainAccount',\n 'AccountsController:listMultichainAccounts',\n 'MultichainAssetsController:getState',\n 'PermissionController:hasPermission',\n ],\n events: ['NotificationServicesController:notificationsListUpdated'],\n });\n\n const interfaceController = new SnapInterfaceController({\n messenger: interfaceControllerMessenger,\n });\n\n const permissionController = getPermissionController(options);\n\n return {\n permissionController,\n subjectMetadataController,\n interfaceController,\n };\n}\n\n/**\n * Get the permission controller for the Snap.\n *\n * @param options - The options.\n * @param options.controllerMessenger - The controller messenger.\n * @param options.options - Miscellaneous options.\n * @returns The permission controller for the Snap.\n */\nfunction getPermissionController(options: GetControllersOptions) {\n const { controllerMessenger } = options;\n const permissionSpecifications = getPermissionSpecifications(options);\n const messenger = new Messenger({\n namespace: 'PermissionController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger,\n actions: [\n `ApprovalController:addRequest`,\n `ApprovalController:hasRequest`,\n `ApprovalController:acceptRequest`,\n `ApprovalController:rejectRequest`,\n `SnapController:getPermitted`,\n `SnapController:install`,\n `SubjectMetadataController:getSubjectMetadata`,\n ],\n });\n\n const simulatedAccounts = options.options.accounts;\n const ethereumAccounts = simulatedAccounts\n .filter((account) =>\n account.scopes.some((scope) => scope.startsWith('eip155')),\n )\n .map((account) => ({\n type: 'eip155:eoa',\n address: account.address as Hex,\n }));\n\n return new PermissionController({\n messenger,\n caveatSpecifications: {\n [Caip25CaveatType]: caip25CaveatBuilder({\n findNetworkClientIdByChainId: (chainId) => chainId,\n isNonEvmScopeSupported: (_scope) => true,\n getNonEvmAccountAddresses: (scope) =>\n simulatedAccounts\n .filter((account) => account.scopes.includes(scope))\n .map((account) => `${scope}:${account.address}`),\n listAccounts: () => ethereumAccounts,\n }),\n ...snapsCaveatsSpecifications,\n ...snapsEndowmentCaveatSpecifications,\n },\n permissionSpecifications,\n unrestrictedMethods: UNRESTRICTED_METHODS,\n });\n}\n\n/**\n * Register the Snap. This sets up the Snap's permissions and subject metadata.\n *\n * @param snapId - The ID of the Snap to install.\n * @param manifest - The parsed manifest.\n * @param controllers - The controllers for the Snap.\n * @param controllers.permissionController - The permission controller.\n * @param controllers.subjectMetadataController - The subject metadata controller.\n */\nexport async function registerSnap(\n snapId: SnapId,\n manifest: SnapManifest,\n {\n permissionController,\n subjectMetadataController,\n }: Omit<Controllers, 'interfaceController'>,\n) {\n subjectMetadataController.addSubjectMetadata({\n origin: snapId,\n subjectType: SubjectType.Snap,\n });\n\n const approvedPermissions = processSnapPermissions(\n getSafeJson(manifest.initialPermissions),\n );\n\n permissionController.grantPermissions({\n approvedPermissions,\n subject: { origin: snapId },\n preserveExistingPermissions: false,\n });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { MessengerActions, MessengerEvents, MockAnyNamespace } from "@metamask/messenger";
2
2
  import { Messenger } from "@metamask/messenger";
3
- import type { CaveatSpecificationConstraint, PermissionControllerMessenger, PermissionSpecificationConstraint } from "@metamask/permission-controller";
3
+ import type { PermissionControllerMessenger } from "@metamask/permission-controller";
4
4
  import { PermissionController, SubjectMetadataController } from "@metamask/permission-controller";
5
5
  import type { ExecutionServiceMessenger, SnapControllerMessenger, SnapInterfaceControllerMessenger, SnapRegistryControllerMessenger } from "@metamask/snaps-controllers";
6
6
  import { SnapInterfaceController } from "@metamask/snaps-controllers";
@@ -17,7 +17,7 @@ export type GetControllersOptions = {
17
17
  options: SimulationOptions;
18
18
  };
19
19
  export type Controllers = {
20
- permissionController: PermissionController<PermissionSpecificationConstraint, CaveatSpecificationConstraint>;
20
+ permissionController: PermissionController;
21
21
  subjectMetadataController: SubjectMetadataController;
22
22
  interfaceController: SnapInterfaceController;
23
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"controllers.d.cts","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,EAAE,SAAS,EAAE,4BAA4B;AAChD,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAC7B,iCAAiC,EAClC,wCAAwC;AACzC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAChC,oCAAoC;AACrC,OAAO,EAAE,uBAAuB,EAAE,oCAAoC;AAMtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAM1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAkB;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAqB;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,0BAAgB;AAE/C,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAC7C,gBAAgB,EAChB,gBAAgB,CACZ,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,EACD,eAAe,CACX,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,CACF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,mBAAmB,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,KAAK,EAAE,yBAAyB,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,oBAAoB,EAAE,oBAAoB,CACxC,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC;IACF,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,mBAAmB,EAAE,uBAAuB,CAAC;CAC9C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,CA0C1E;AA6DD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,EACE,oBAAoB,EACpB,yBAAyB,GAC1B,EAAE,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,iBAgB5C"}
1
+ {"version":3,"file":"controllers.d.cts","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,EAAE,SAAS,EAAE,4BAA4B;AAChD,OAAO,KAAK,EAAE,6BAA6B,EAAE,wCAAwC;AACrF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAChC,oCAAoC;AACrC,OAAO,EAAE,uBAAuB,EAAE,oCAAoC;AAMtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAM1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAkB;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAqB;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,0BAAgB;AAE/C,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAC7C,gBAAgB,EAChB,gBAAgB,CACZ,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,EACD,eAAe,CACX,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,CACF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,mBAAmB,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,KAAK,EAAE,yBAAyB,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,mBAAmB,EAAE,uBAAuB,CAAC;CAC9C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,CA0C1E;AA6DD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,EACE,oBAAoB,EACpB,yBAAyB,GAC1B,EAAE,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,iBAgB5C"}
@@ -1,6 +1,6 @@
1
1
  import type { MessengerActions, MessengerEvents, MockAnyNamespace } from "@metamask/messenger";
2
2
  import { Messenger } from "@metamask/messenger";
3
- import type { CaveatSpecificationConstraint, PermissionControllerMessenger, PermissionSpecificationConstraint } from "@metamask/permission-controller";
3
+ import type { PermissionControllerMessenger } from "@metamask/permission-controller";
4
4
  import { PermissionController, SubjectMetadataController } from "@metamask/permission-controller";
5
5
  import type { ExecutionServiceMessenger, SnapControllerMessenger, SnapInterfaceControllerMessenger, SnapRegistryControllerMessenger } from "@metamask/snaps-controllers";
6
6
  import { SnapInterfaceController } from "@metamask/snaps-controllers";
@@ -17,7 +17,7 @@ export type GetControllersOptions = {
17
17
  options: SimulationOptions;
18
18
  };
19
19
  export type Controllers = {
20
- permissionController: PermissionController<PermissionSpecificationConstraint, CaveatSpecificationConstraint>;
20
+ permissionController: PermissionController;
21
21
  subjectMetadataController: SubjectMetadataController;
22
22
  interfaceController: SnapInterfaceController;
23
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"controllers.d.mts","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,EAAE,SAAS,EAAE,4BAA4B;AAChD,OAAO,KAAK,EACV,6BAA6B,EAC7B,6BAA6B,EAC7B,iCAAiC,EAClC,wCAAwC;AACzC,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAChC,oCAAoC;AACrC,OAAO,EAAE,uBAAuB,EAAE,oCAAoC;AAMtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAM1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAkB;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAqB;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,0BAAgB;AAE/C,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAC7C,gBAAgB,EAChB,gBAAgB,CACZ,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,EACD,eAAe,CACX,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,CACF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,mBAAmB,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,KAAK,EAAE,yBAAyB,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,oBAAoB,EAAE,oBAAoB,CACxC,iCAAiC,EACjC,6BAA6B,CAC9B,CAAC;IACF,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,mBAAmB,EAAE,uBAAuB,CAAC;CAC9C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,CA0C1E;AA6DD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,EACE,oBAAoB,EACpB,yBAAyB,GAC1B,EAAE,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,iBAgB5C"}
1
+ {"version":3,"file":"controllers.d.mts","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,4BAA4B;AAC7B,OAAO,EAAE,SAAS,EAAE,4BAA4B;AAChD,OAAO,KAAK,EAAE,6BAA6B,EAAE,wCAAwC;AACrF,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EAE1B,wCAAwC;AACzC,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAChC,oCAAoC;AACrC,OAAO,EAAE,uBAAuB,EAAE,oCAAoC;AAMtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAM1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAkB;AACnD,OAAO,KAAK,EAAE,yBAAyB,EAAE,yBAAqB;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,0BAAgB;AAE/C,MAAM,MAAM,uBAAuB,GAAG,SAAS,CAC7C,gBAAgB,EAChB,gBAAgB,CACZ,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,EACD,eAAe,CACX,yBAAyB,GACzB,6BAA6B,GAC7B,uBAAuB,GACvB,gCAAgC,GAChC,+BAA+B,CAClC,CACF,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,mBAAmB,EAAE,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC9C,KAAK,EAAE,yBAAyB,CAAC;IACjC,OAAO,EAAE,eAAe,CAAC;IACzB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,mBAAmB,EAAE,uBAAuB,CAAC;CAC9C,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,WAAW,CA0C1E;AA6DD;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,YAAY,EACtB,EACE,oBAAoB,EACpB,yBAAyB,GAC1B,EAAE,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,iBAgB5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"controllers.mjs","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n caip25CaveatBuilder,\n Caip25CaveatType,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n MessengerActions,\n MessengerEvents,\n MockAnyNamespace,\n} from '@metamask/messenger';\nimport { Messenger } from '@metamask/messenger';\nimport type {\n CaveatSpecificationConstraint,\n PermissionControllerMessenger,\n PermissionSpecificationConstraint,\n} from '@metamask/permission-controller';\nimport {\n PermissionController,\n SubjectMetadataController,\n SubjectType,\n} from '@metamask/permission-controller';\nimport type {\n ExecutionServiceMessenger,\n SnapControllerMessenger,\n SnapInterfaceControllerMessenger,\n SnapRegistryControllerMessenger,\n} from '@metamask/snaps-controllers';\nimport { SnapInterfaceController } from '@metamask/snaps-controllers';\nimport {\n caveatSpecifications as snapsCaveatsSpecifications,\n endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications,\n processSnapPermissions,\n} from '@metamask/snaps-rpc-methods';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { SnapManifest } from '@metamask/snaps-utils';\nimport type { Hex } from '@metamask/utils';\nimport { getSafeJson } from '@metamask/utils';\n\nimport { getPermissionSpecifications } from './methods';\nimport { UNRESTRICTED_METHODS } from './methods/constants';\nimport type { SimulationOptions } from './options';\nimport type { RestrictedMiddlewareHooks } from './simulation';\nimport type { RunSagaFunction } from './store';\n\nexport type RootControllerMessenger = Messenger<\n MockAnyNamespace,\n MessengerActions<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >,\n MessengerEvents<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >\n>;\n\nexport type GetControllersOptions = {\n controllerMessenger: Messenger<any, any, any>;\n hooks: RestrictedMiddlewareHooks;\n runSaga: RunSagaFunction;\n options: SimulationOptions;\n};\n\nexport type Controllers = {\n permissionController: PermissionController<\n PermissionSpecificationConstraint,\n CaveatSpecificationConstraint\n >;\n subjectMetadataController: SubjectMetadataController;\n interfaceController: SnapInterfaceController;\n};\n\n/**\n * Get the controllers for the Snap.\n *\n * @param options - The options.\n * @returns The controllers for the Snap.\n */\nexport function getControllers(options: GetControllersOptions): Controllers {\n const { controllerMessenger } = options;\n const subjectMetadataController = new SubjectMetadataController({\n messenger: new Messenger({\n namespace: 'SubjectMetadataController',\n parent: controllerMessenger,\n }),\n subjectCacheLimit: 100,\n });\n\n const interfaceControllerMessenger: SnapInterfaceControllerMessenger =\n new Messenger({\n namespace: 'SnapInterfaceController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger: interfaceControllerMessenger,\n actions: [\n 'PhishingController:testOrigin',\n 'ApprovalController:hasRequest',\n 'ApprovalController:acceptRequest',\n 'AccountsController:getAccountByAddress',\n 'AccountsController:getSelectedMultichainAccount',\n 'AccountsController:listMultichainAccounts',\n 'MultichainAssetsController:getState',\n 'PermissionController:hasPermission',\n ],\n events: ['NotificationServicesController:notificationsListUpdated'],\n });\n\n const interfaceController = new SnapInterfaceController({\n messenger: interfaceControllerMessenger,\n });\n\n const permissionController = getPermissionController(options);\n\n return {\n permissionController,\n subjectMetadataController,\n interfaceController,\n };\n}\n\n/**\n * Get the permission controller for the Snap.\n *\n * @param options - The options.\n * @param options.controllerMessenger - The controller messenger.\n * @param options.options - Miscellaneous options.\n * @returns The permission controller for the Snap.\n */\nfunction getPermissionController(options: GetControllersOptions) {\n const { controllerMessenger } = options;\n const permissionSpecifications = getPermissionSpecifications(options);\n const messenger = new Messenger({\n namespace: 'PermissionController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger,\n actions: [\n `ApprovalController:addRequest`,\n `ApprovalController:hasRequest`,\n `ApprovalController:acceptRequest`,\n `ApprovalController:rejectRequest`,\n `SnapController:getPermitted`,\n `SnapController:install`,\n `SubjectMetadataController:getSubjectMetadata`,\n ],\n });\n\n const simulatedAccounts = options.options.accounts;\n const ethereumAccounts = simulatedAccounts\n .filter((account) =>\n account.scopes.some((scope) => scope.startsWith('eip155')),\n )\n .map((account) => ({\n type: 'eip155:eoa',\n address: account.address as Hex,\n }));\n\n return new PermissionController({\n messenger,\n caveatSpecifications: {\n [Caip25CaveatType]: caip25CaveatBuilder({\n findNetworkClientIdByChainId: (chainId) => chainId,\n isNonEvmScopeSupported: (_scope) => true,\n getNonEvmAccountAddresses: (scope) =>\n simulatedAccounts\n .filter((account) => account.scopes.includes(scope))\n .map((account) => `${scope}:${account.address}`),\n listAccounts: () => ethereumAccounts,\n }),\n ...snapsCaveatsSpecifications,\n ...snapsEndowmentCaveatSpecifications,\n },\n permissionSpecifications,\n unrestrictedMethods: UNRESTRICTED_METHODS,\n });\n}\n\n/**\n * Register the Snap. This sets up the Snap's permissions and subject metadata.\n *\n * @param snapId - The ID of the Snap to install.\n * @param manifest - The parsed manifest.\n * @param controllers - The controllers for the Snap.\n * @param controllers.permissionController - The permission controller.\n * @param controllers.subjectMetadataController - The subject metadata controller.\n */\nexport async function registerSnap(\n snapId: SnapId,\n manifest: SnapManifest,\n {\n permissionController,\n subjectMetadataController,\n }: Omit<Controllers, 'interfaceController'>,\n) {\n subjectMetadataController.addSubjectMetadata({\n origin: snapId,\n subjectType: SubjectType.Snap,\n });\n\n const approvedPermissions = processSnapPermissions(\n getSafeJson(manifest.initialPermissions),\n );\n\n permissionController.grantPermissions({\n approvedPermissions,\n subject: { origin: snapId },\n preserveExistingPermissions: false,\n });\n}\n"]}
1
+ {"version":3,"file":"controllers.mjs","sourceRoot":"","sources":["../src/controllers.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n caip25CaveatBuilder,\n Caip25CaveatType,\n} from '@metamask/chain-agnostic-permission';\nimport type {\n MessengerActions,\n MessengerEvents,\n MockAnyNamespace,\n} from '@metamask/messenger';\nimport { Messenger } from '@metamask/messenger';\nimport type { PermissionControllerMessenger } from '@metamask/permission-controller';\nimport {\n PermissionController,\n SubjectMetadataController,\n SubjectType,\n} from '@metamask/permission-controller';\nimport type {\n ExecutionServiceMessenger,\n SnapControllerMessenger,\n SnapInterfaceControllerMessenger,\n SnapRegistryControllerMessenger,\n} from '@metamask/snaps-controllers';\nimport { SnapInterfaceController } from '@metamask/snaps-controllers';\nimport {\n caveatSpecifications as snapsCaveatsSpecifications,\n endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications,\n processSnapPermissions,\n} from '@metamask/snaps-rpc-methods';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport type { SnapManifest } from '@metamask/snaps-utils';\nimport type { Hex } from '@metamask/utils';\nimport { getSafeJson } from '@metamask/utils';\n\nimport { getPermissionSpecifications } from './methods';\nimport { UNRESTRICTED_METHODS } from './methods/constants';\nimport type { SimulationOptions } from './options';\nimport type { RestrictedMiddlewareHooks } from './simulation';\nimport type { RunSagaFunction } from './store';\n\nexport type RootControllerMessenger = Messenger<\n MockAnyNamespace,\n MessengerActions<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >,\n MessengerEvents<\n | ExecutionServiceMessenger\n | PermissionControllerMessenger\n | SnapControllerMessenger\n | SnapInterfaceControllerMessenger\n | SnapRegistryControllerMessenger\n >\n>;\n\nexport type GetControllersOptions = {\n controllerMessenger: Messenger<any, any, any>;\n hooks: RestrictedMiddlewareHooks;\n runSaga: RunSagaFunction;\n options: SimulationOptions;\n};\n\nexport type Controllers = {\n permissionController: PermissionController;\n subjectMetadataController: SubjectMetadataController;\n interfaceController: SnapInterfaceController;\n};\n\n/**\n * Get the controllers for the Snap.\n *\n * @param options - The options.\n * @returns The controllers for the Snap.\n */\nexport function getControllers(options: GetControllersOptions): Controllers {\n const { controllerMessenger } = options;\n const subjectMetadataController = new SubjectMetadataController({\n messenger: new Messenger({\n namespace: 'SubjectMetadataController',\n parent: controllerMessenger,\n }),\n subjectCacheLimit: 100,\n });\n\n const interfaceControllerMessenger: SnapInterfaceControllerMessenger =\n new Messenger({\n namespace: 'SnapInterfaceController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger: interfaceControllerMessenger,\n actions: [\n 'PhishingController:testOrigin',\n 'ApprovalController:hasRequest',\n 'ApprovalController:acceptRequest',\n 'AccountsController:getAccountByAddress',\n 'AccountsController:getSelectedMultichainAccount',\n 'AccountsController:listMultichainAccounts',\n 'MultichainAssetsController:getState',\n 'PermissionController:hasPermission',\n ],\n events: ['NotificationServicesController:notificationsListUpdated'],\n });\n\n const interfaceController = new SnapInterfaceController({\n messenger: interfaceControllerMessenger,\n });\n\n const permissionController = getPermissionController(options);\n\n return {\n permissionController,\n subjectMetadataController,\n interfaceController,\n };\n}\n\n/**\n * Get the permission controller for the Snap.\n *\n * @param options - The options.\n * @param options.controllerMessenger - The controller messenger.\n * @param options.options - Miscellaneous options.\n * @returns The permission controller for the Snap.\n */\nfunction getPermissionController(options: GetControllersOptions) {\n const { controllerMessenger } = options;\n const permissionSpecifications = getPermissionSpecifications(options);\n const messenger = new Messenger({\n namespace: 'PermissionController',\n parent: controllerMessenger,\n });\n\n controllerMessenger.delegate({\n messenger,\n actions: [\n `ApprovalController:addRequest`,\n `ApprovalController:hasRequest`,\n `ApprovalController:acceptRequest`,\n `ApprovalController:rejectRequest`,\n `SnapController:getPermitted`,\n `SnapController:install`,\n `SubjectMetadataController:getSubjectMetadata`,\n ],\n });\n\n const simulatedAccounts = options.options.accounts;\n const ethereumAccounts = simulatedAccounts\n .filter((account) =>\n account.scopes.some((scope) => scope.startsWith('eip155')),\n )\n .map((account) => ({\n type: 'eip155:eoa',\n address: account.address as Hex,\n }));\n\n return new PermissionController({\n messenger,\n caveatSpecifications: {\n [Caip25CaveatType]: caip25CaveatBuilder({\n findNetworkClientIdByChainId: (chainId) => chainId,\n isNonEvmScopeSupported: (_scope) => true,\n getNonEvmAccountAddresses: (scope) =>\n simulatedAccounts\n .filter((account) => account.scopes.includes(scope))\n .map((account) => `${scope}:${account.address}`),\n listAccounts: () => ethereumAccounts,\n }),\n ...snapsCaveatsSpecifications,\n ...snapsEndowmentCaveatSpecifications,\n },\n permissionSpecifications,\n unrestrictedMethods: UNRESTRICTED_METHODS,\n });\n}\n\n/**\n * Register the Snap. This sets up the Snap's permissions and subject metadata.\n *\n * @param snapId - The ID of the Snap to install.\n * @param manifest - The parsed manifest.\n * @param controllers - The controllers for the Snap.\n * @param controllers.permissionController - The permission controller.\n * @param controllers.subjectMetadataController - The subject metadata controller.\n */\nexport async function registerSnap(\n snapId: SnapId,\n manifest: SnapManifest,\n {\n permissionController,\n subjectMetadataController,\n }: Omit<Controllers, 'interfaceController'>,\n) {\n subjectMetadataController.addSubjectMetadata({\n origin: snapId,\n subjectType: SubjectType.Snap,\n });\n\n const approvedPermissions = processSnapPermissions(\n getSafeJson(manifest.initialPermissions),\n );\n\n permissionController.grantPermissions({\n approvedPermissions,\n subject: { origin: snapId },\n preserveExistingPermissions: false,\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask/snaps-simulation",
3
- "version": "4.1.2",
3
+ "version": "4.1.3",
4
4
  "description": "A simulation framework for MetaMask Snaps, enabling headless testing of Snaps in a controlled environment",
5
5
  "keywords": [
6
6
  "MetaMask",
@@ -56,17 +56,17 @@
56
56
  },
57
57
  "dependencies": {
58
58
  "@metamask/chain-agnostic-permission": "^1.5.0",
59
- "@metamask/json-rpc-engine": "^10.2.3",
59
+ "@metamask/json-rpc-engine": "^10.2.4",
60
60
  "@metamask/json-rpc-middleware-stream": "^8.0.8",
61
61
  "@metamask/key-tree": "^10.1.1",
62
- "@metamask/messenger": "^0.3.0",
63
- "@metamask/permission-controller": "^12.2.1",
62
+ "@metamask/messenger": "^1.1.0",
63
+ "@metamask/permission-controller": "^12.3.0",
64
64
  "@metamask/rpc-errors": "^7.0.3",
65
- "@metamask/snaps-controllers": "^19.0.0",
65
+ "@metamask/snaps-controllers": "^19.0.1",
66
66
  "@metamask/snaps-execution-environments": "^11.0.2",
67
- "@metamask/snaps-rpc-methods": "^15.0.1",
67
+ "@metamask/snaps-rpc-methods": "^15.0.2",
68
68
  "@metamask/snaps-sdk": "^11.0.0",
69
- "@metamask/snaps-utils": "^12.1.2",
69
+ "@metamask/snaps-utils": "^12.1.3",
70
70
  "@metamask/superstruct": "^3.2.1",
71
71
  "@metamask/utils": "^11.10.0",
72
72
  "@reduxjs/toolkit": "^1.9.5",