@metamask/snaps-controllers 15.0.2 → 16.1.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 (76) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/dist/cronjob/CronjobController.cjs +17 -17
  3. package/dist/cronjob/CronjobController.cjs.map +1 -1
  4. package/dist/cronjob/CronjobController.d.cts +3 -2
  5. package/dist/cronjob/CronjobController.d.cts.map +1 -1
  6. package/dist/cronjob/CronjobController.d.mts +3 -2
  7. package/dist/cronjob/CronjobController.d.mts.map +1 -1
  8. package/dist/cronjob/CronjobController.mjs +17 -17
  9. package/dist/cronjob/CronjobController.mjs.map +1 -1
  10. package/dist/insights/SnapInsightsController.cjs +8 -8
  11. package/dist/insights/SnapInsightsController.cjs.map +1 -1
  12. package/dist/insights/SnapInsightsController.d.cts +3 -2
  13. package/dist/insights/SnapInsightsController.d.cts.map +1 -1
  14. package/dist/insights/SnapInsightsController.d.mts +3 -2
  15. package/dist/insights/SnapInsightsController.d.mts.map +1 -1
  16. package/dist/insights/SnapInsightsController.mjs +8 -8
  17. package/dist/insights/SnapInsightsController.mjs.map +1 -1
  18. package/dist/interface/SnapInterfaceController.cjs +16 -17
  19. package/dist/interface/SnapInterfaceController.cjs.map +1 -1
  20. package/dist/interface/SnapInterfaceController.d.cts +3 -2
  21. package/dist/interface/SnapInterfaceController.d.cts.map +1 -1
  22. package/dist/interface/SnapInterfaceController.d.mts +3 -2
  23. package/dist/interface/SnapInterfaceController.d.mts.map +1 -1
  24. package/dist/interface/SnapInterfaceController.mjs +16 -17
  25. package/dist/interface/SnapInterfaceController.mjs.map +1 -1
  26. package/dist/multichain/MultichainRouter.cjs.map +1 -1
  27. package/dist/multichain/MultichainRouter.d.cts +3 -3
  28. package/dist/multichain/MultichainRouter.d.cts.map +1 -1
  29. package/dist/multichain/MultichainRouter.d.mts +3 -3
  30. package/dist/multichain/MultichainRouter.d.mts.map +1 -1
  31. package/dist/multichain/MultichainRouter.mjs.map +1 -1
  32. package/dist/services/ExecutionService.cjs.map +1 -1
  33. package/dist/services/ExecutionService.d.cts +2 -2
  34. package/dist/services/ExecutionService.d.cts.map +1 -1
  35. package/dist/services/ExecutionService.d.mts +2 -2
  36. package/dist/services/ExecutionService.d.mts.map +1 -1
  37. package/dist/services/ExecutionService.mjs.map +1 -1
  38. package/dist/snaps/SnapController.cjs +124 -135
  39. package/dist/snaps/SnapController.cjs.map +1 -1
  40. package/dist/snaps/SnapController.d.cts +5 -16
  41. package/dist/snaps/SnapController.d.cts.map +1 -1
  42. package/dist/snaps/SnapController.d.mts +5 -16
  43. package/dist/snaps/SnapController.d.mts.map +1 -1
  44. package/dist/snaps/SnapController.mjs +126 -137
  45. package/dist/snaps/SnapController.mjs.map +1 -1
  46. package/dist/snaps/constants.cjs +12 -1
  47. package/dist/snaps/constants.cjs.map +1 -1
  48. package/dist/snaps/constants.d.cts +9 -0
  49. package/dist/snaps/constants.d.cts.map +1 -1
  50. package/dist/snaps/constants.d.mts +9 -0
  51. package/dist/snaps/constants.d.mts.map +1 -1
  52. package/dist/snaps/constants.mjs +11 -0
  53. package/dist/snaps/constants.mjs.map +1 -1
  54. package/dist/snaps/location/npm.cjs +6 -3
  55. package/dist/snaps/location/npm.cjs.map +1 -1
  56. package/dist/snaps/location/npm.d.cts +7 -0
  57. package/dist/snaps/location/npm.d.cts.map +1 -1
  58. package/dist/snaps/location/npm.d.mts +7 -0
  59. package/dist/snaps/location/npm.d.mts.map +1 -1
  60. package/dist/snaps/location/npm.mjs +5 -2
  61. package/dist/snaps/location/npm.mjs.map +1 -1
  62. package/dist/snaps/registry/json.cjs +7 -7
  63. package/dist/snaps/registry/json.cjs.map +1 -1
  64. package/dist/snaps/registry/json.d.cts +3 -2
  65. package/dist/snaps/registry/json.d.cts.map +1 -1
  66. package/dist/snaps/registry/json.d.mts +3 -2
  67. package/dist/snaps/registry/json.d.mts.map +1 -1
  68. package/dist/snaps/registry/json.mjs +7 -7
  69. package/dist/snaps/registry/json.mjs.map +1 -1
  70. package/dist/websocket/WebSocketService.cjs.map +1 -1
  71. package/dist/websocket/WebSocketService.d.cts +2 -2
  72. package/dist/websocket/WebSocketService.d.cts.map +1 -1
  73. package/dist/websocket/WebSocketService.d.mts +2 -2
  74. package/dist/websocket/WebSocketService.d.mts.map +1 -1
  75. package/dist/websocket/WebSocketService.mjs.map +1 -1
  76. package/package.json +11 -10
@@ -83,20 +83,20 @@ class SnapController extends base_controller_1.BaseController {
83
83
  #preinstalledSnaps;
84
84
  #trackEvent;
85
85
  #trackSnapExport;
86
- constructor({ closeAllConnections, messenger, state, dynamicPermissions = ['eth_accounts'], environmentEndowmentPermissions = [], excludedPermissions = {}, idleTimeCheckInterval = (0, utils_1.inMilliseconds)(5, utils_1.Duration.Second), maxIdleTime = (0, utils_1.inMilliseconds)(30, utils_1.Duration.Second), maxRequestTime = (0, utils_1.inMilliseconds)(60, utils_1.Duration.Second), fetchFunction = globalThis.fetch.bind(undefined), featureFlags = {}, detectSnapLocation: detectSnapLocationFunction = location_1.detectSnapLocation, preinstalledSnaps = null, encryptor, getMnemonicSeed, getFeatureFlags = () => ({}), clientCryptography, trackEvent, }) {
86
+ constructor({ closeAllConnections, messenger, state, dynamicPermissions = ['endowment:caip25', 'wallet_snap'], environmentEndowmentPermissions = [], excludedPermissions = {}, idleTimeCheckInterval = (0, utils_1.inMilliseconds)(5, utils_1.Duration.Second), maxIdleTime = (0, utils_1.inMilliseconds)(30, utils_1.Duration.Second), maxRequestTime = (0, utils_1.inMilliseconds)(60, utils_1.Duration.Second), fetchFunction = globalThis.fetch.bind(undefined), featureFlags = {}, detectSnapLocation: detectSnapLocationFunction = location_1.detectSnapLocation, preinstalledSnaps = null, encryptor, getMnemonicSeed, getFeatureFlags = () => ({}), clientCryptography, trackEvent, }) {
87
87
  super({
88
88
  messenger,
89
89
  metadata: {
90
90
  snapStates: {
91
91
  includeInStateLogs: false,
92
92
  persist: true,
93
- anonymous: false,
93
+ includeInDebugSnapshot: false,
94
94
  usedInUi: false,
95
95
  },
96
96
  unencryptedSnapStates: {
97
97
  includeInStateLogs: false,
98
98
  persist: true,
99
- anonymous: false,
99
+ includeInDebugSnapshot: false,
100
100
  usedInUi: false,
101
101
  },
102
102
  snaps: {
@@ -127,7 +127,7 @@ class SnapController extends base_controller_1.BaseController {
127
127
  return memo;
128
128
  }, {}));
129
129
  },
130
- anonymous: false,
130
+ includeInDebugSnapshot: false,
131
131
  // TODO: Ensure larger snap properties are not sent to the UI
132
132
  // Currently these are stripped out manually in the extension
133
133
  usedInUi: true,
@@ -162,21 +162,21 @@ class SnapController extends base_controller_1.BaseController {
162
162
  this.#trackEvent = trackEvent;
163
163
  this.#pollForLastRequestStatus();
164
164
  /* eslint-disable @typescript-eslint/unbound-method */
165
- this.messagingSystem.subscribe('ExecutionService:unhandledError', this._onUnhandledSnapError);
166
- this.messagingSystem.subscribe('ExecutionService:outboundRequest', this._onOutboundRequest);
167
- this.messagingSystem.subscribe('ExecutionService:outboundResponse', this._onOutboundResponse);
165
+ this.messenger.subscribe('ExecutionService:unhandledError', this._onUnhandledSnapError);
166
+ this.messenger.subscribe('ExecutionService:outboundRequest', this._onOutboundRequest);
167
+ this.messenger.subscribe('ExecutionService:outboundResponse', this._onOutboundResponse);
168
168
  /* eslint-enable @typescript-eslint/unbound-method */
169
- this.messagingSystem.subscribe('SnapController:snapInstalled', ({ id }, origin) => {
169
+ this.messenger.subscribe('SnapController:snapInstalled', ({ id }, origin) => {
170
170
  this.#callLifecycleHook(origin, id, snaps_utils_1.HandlerType.OnInstall).catch((error) => {
171
171
  (0, snaps_utils_1.logError)(`Error when calling \`onInstall\` lifecycle hook for snap "${id}": ${(0, snaps_sdk_1.getErrorMessage)(error)}`);
172
172
  });
173
173
  });
174
- this.messagingSystem.subscribe('SnapController:snapUpdated', ({ id }, _oldVersion, origin) => {
174
+ this.messenger.subscribe('SnapController:snapUpdated', ({ id }, _oldVersion, origin) => {
175
175
  this.#callLifecycleHook(origin, id, snaps_utils_1.HandlerType.OnUpdate).catch((error) => {
176
176
  (0, snaps_utils_1.logError)(`Error when calling \`onUpdate\` lifecycle hook for snap "${id}": ${(0, snaps_sdk_1.getErrorMessage)(error)}`);
177
177
  });
178
178
  });
179
- this.messagingSystem.subscribe('KeyringController:lock', this.#handleLock.bind(this));
179
+ this.messenger.subscribe('KeyringController:lock', this.#handleLock.bind(this));
180
180
  this.#initializeStateMachine();
181
181
  this.#registerMessageHandlers();
182
182
  Object.values(this.state?.snaps ?? {}).forEach((snap) => this.#setupRuntime(snap.id));
@@ -184,7 +184,7 @@ class SnapController extends base_controller_1.BaseController {
184
184
  this.#handlePreinstalledSnaps(this.#preinstalledSnaps);
185
185
  }
186
186
  this.#trackSnapExport = (0, utils_2.throttleTracking)((snapId, handler, success, origin) => {
187
- const snapMetadata = this.messagingSystem.call('SnapsRegistry:getMetadata', snapId);
187
+ const snapMetadata = this.messenger.call('SnapsRegistry:getMetadata', snapId);
188
188
  this.#trackEvent({
189
189
  event: 'Snap Export Used',
190
190
  category: 'Snaps',
@@ -267,29 +267,29 @@ class SnapController extends base_controller_1.BaseController {
267
267
  * actions.
268
268
  */
269
269
  #registerMessageHandlers() {
270
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:init`, (...args) => this.init(...args));
271
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:clearSnapState`, (...args) => this.clearSnapState(...args));
272
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:get`, (...args) => this.get(...args));
273
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:getSnapState`, async (...args) => this.getSnapState(...args));
274
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:handleRequest`, async (...args) => this.handleRequest(...args));
275
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:has`, (...args) => this.has(...args));
276
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:updateRegistry`, async () => this.updateRegistry());
277
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:updateSnapState`, async (...args) => this.updateSnapState(...args));
278
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:enable`, (...args) => this.enableSnap(...args));
279
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:disable`, async (...args) => this.disableSnap(...args));
280
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:remove`, async (...args) => this.removeSnap(...args));
281
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:getPermitted`, (...args) => this.getPermittedSnaps(...args));
282
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:install`, async (...args) => this.installSnaps(...args));
283
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:getAll`, (...args) => this.getAllSnaps(...args));
284
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:getRunnableSnaps`, (...args) => this.getRunnableSnaps(...args));
285
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:incrementActiveReferences`, (...args) => this.incrementActiveReferences(...args));
286
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:decrementActiveReferences`, (...args) => this.decrementActiveReferences(...args));
287
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:disconnectOrigin`, (...args) => this.removeSnapFromSubject(...args));
288
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:revokeDynamicPermissions`, (...args) => this.revokeDynamicSnapPermissions(...args));
289
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:getFile`, async (...args) => this.getSnapFile(...args));
290
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:stopAllSnaps`, async (...args) => this.stopAllSnaps(...args));
291
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:isMinimumPlatformVersion`, (...args) => this.isMinimumPlatformVersion(...args));
292
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:setClientActive`, (...args) => this.setClientActive(...args));
270
+ this.messenger.registerActionHandler(`${exports.controllerName}:init`, (...args) => this.init(...args));
271
+ this.messenger.registerActionHandler(`${exports.controllerName}:clearSnapState`, (...args) => this.clearSnapState(...args));
272
+ this.messenger.registerActionHandler(`${exports.controllerName}:get`, (...args) => this.get(...args));
273
+ this.messenger.registerActionHandler(`${exports.controllerName}:getSnapState`, async (...args) => this.getSnapState(...args));
274
+ this.messenger.registerActionHandler(`${exports.controllerName}:handleRequest`, async (...args) => this.handleRequest(...args));
275
+ this.messenger.registerActionHandler(`${exports.controllerName}:has`, (...args) => this.has(...args));
276
+ this.messenger.registerActionHandler(`${exports.controllerName}:updateRegistry`, async () => this.updateRegistry());
277
+ this.messenger.registerActionHandler(`${exports.controllerName}:updateSnapState`, async (...args) => this.updateSnapState(...args));
278
+ this.messenger.registerActionHandler(`${exports.controllerName}:enable`, (...args) => this.enableSnap(...args));
279
+ this.messenger.registerActionHandler(`${exports.controllerName}:disable`, async (...args) => this.disableSnap(...args));
280
+ this.messenger.registerActionHandler(`${exports.controllerName}:remove`, async (...args) => this.removeSnap(...args));
281
+ this.messenger.registerActionHandler(`${exports.controllerName}:getPermitted`, (...args) => this.getPermittedSnaps(...args));
282
+ this.messenger.registerActionHandler(`${exports.controllerName}:install`, async (...args) => this.installSnaps(...args));
283
+ this.messenger.registerActionHandler(`${exports.controllerName}:getAll`, (...args) => this.getAllSnaps(...args));
284
+ this.messenger.registerActionHandler(`${exports.controllerName}:getRunnableSnaps`, (...args) => this.getRunnableSnaps(...args));
285
+ this.messenger.registerActionHandler(`${exports.controllerName}:incrementActiveReferences`, (...args) => this.incrementActiveReferences(...args));
286
+ this.messenger.registerActionHandler(`${exports.controllerName}:decrementActiveReferences`, (...args) => this.decrementActiveReferences(...args));
287
+ this.messenger.registerActionHandler(`${exports.controllerName}:disconnectOrigin`, (...args) => this.removeSnapFromSubject(...args));
288
+ this.messenger.registerActionHandler(`${exports.controllerName}:revokeDynamicPermissions`, (...args) => this.revokeDynamicSnapPermissions(...args));
289
+ this.messenger.registerActionHandler(`${exports.controllerName}:getFile`, async (...args) => this.getSnapFile(...args));
290
+ this.messenger.registerActionHandler(`${exports.controllerName}:stopAllSnaps`, async (...args) => this.stopAllSnaps(...args));
291
+ this.messenger.registerActionHandler(`${exports.controllerName}:isMinimumPlatformVersion`, (...args) => this.isMinimumPlatformVersion(...args));
292
+ this.messenger.registerActionHandler(`${exports.controllerName}:setClientActive`, (...args) => this.setClientActive(...args));
293
293
  }
294
294
  /**
295
295
  * Initialise the SnapController.
@@ -359,10 +359,10 @@ class SnapController extends base_controller_1.BaseController {
359
359
  this.#setupRuntime(snapId);
360
360
  // Emit events
361
361
  if (isUpdate) {
362
- this.messagingSystem.publish('SnapController:snapUpdated', this.getTruncatedExpect(snapId), existingSnap.version, constants_1.METAMASK_ORIGIN, true);
362
+ this.messenger.publish('SnapController:snapUpdated', this.getTruncatedExpect(snapId), existingSnap.version, constants_1.METAMASK_ORIGIN, true);
363
363
  }
364
364
  else {
365
- this.messagingSystem.publish('SnapController:snapInstalled', this.getTruncatedExpect(snapId), constants_1.METAMASK_ORIGIN, true);
365
+ this.messenger.publish('SnapController:snapInstalled', this.getTruncatedExpect(snapId), constants_1.METAMASK_ORIGIN, true);
366
366
  }
367
367
  }
368
368
  }
@@ -384,8 +384,8 @@ class SnapController extends base_controller_1.BaseController {
384
384
  */
385
385
  async updateRegistry() {
386
386
  this.#assertCanUsePlatform();
387
- await this.messagingSystem.call('SnapsRegistry:update');
388
- const blockedSnaps = await this.messagingSystem.call('SnapsRegistry:get', Object.values(this.state.snaps).reduce((blockListArg, snap) => {
387
+ await this.messenger.call('SnapsRegistry:update');
388
+ const blockedSnaps = await this.messenger.call('SnapsRegistry:get', Object.values(this.state.snaps).reduce((blockListArg, snap) => {
389
389
  blockListArg[snap.id] = {
390
390
  version: snap.version,
391
391
  checksum: snap.manifest.source.shasum,
@@ -412,6 +412,7 @@ class SnapController extends base_controller_1.BaseController {
412
412
  versionRange: resolvedVersion,
413
413
  fetch: this.#fetchFunction,
414
414
  allowLocal: false,
415
+ useNpmProxy: true,
415
416
  });
416
417
  await this.#updateSnap({
417
418
  origin: approval_controller_1.ORIGIN_METAMASK,
@@ -444,7 +445,7 @@ class SnapController extends base_controller_1.BaseController {
444
445
  catch (error) {
445
446
  (0, snaps_utils_1.logError)(`Encountered error when stopping blocked snap "${snapId}".`, error);
446
447
  }
447
- this.messagingSystem.publish(`${exports.controllerName}:snapBlocked`, snapId, blockedSnapInfo);
448
+ this.messenger.publish(`${exports.controllerName}:snapBlocked`, snapId, blockedSnapInfo);
448
449
  }
449
450
  /**
450
451
  * Unblocks a snap so that it can be enabled and started again. Emits
@@ -461,10 +462,10 @@ class SnapController extends base_controller_1.BaseController {
461
462
  state.snaps[snapId].blocked = false;
462
463
  delete state.snaps[snapId].blockInformation;
463
464
  });
464
- this.messagingSystem.publish(`${exports.controllerName}:snapUnblocked`, snapId);
465
+ this.messenger.publish(`${exports.controllerName}:snapUnblocked`, snapId);
465
466
  }
466
467
  async #assertIsInstallAllowed(snapId, { platformVersion, ...snapInfo }) {
467
- const results = await this.messagingSystem.call('SnapsRegistry:get', {
468
+ const results = await this.messenger.call('SnapsRegistry:get', {
468
469
  [snapId]: snapInfo,
469
470
  });
470
471
  const result = results[snapId];
@@ -581,7 +582,7 @@ class SnapController extends base_controller_1.BaseController {
581
582
  this.update((state) => {
582
583
  state.snaps[snapId].enabled = true;
583
584
  });
584
- this.messagingSystem.publish('SnapController:snapEnabled', this.getTruncatedExpect(snapId));
585
+ this.messenger.publish('SnapController:snapEnabled', this.getTruncatedExpect(snapId));
585
586
  }
586
587
  /**
587
588
  * Disables the given snap. A snap can only be started if it is enabled.
@@ -599,7 +600,7 @@ class SnapController extends base_controller_1.BaseController {
599
600
  if (this.isRunning(snapId)) {
600
601
  await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Stop);
601
602
  }
602
- this.messagingSystem.publish('SnapController:snapDisabled', this.getTruncatedExpect(snapId));
603
+ this.messenger.publish('SnapController:snapDisabled', this.getTruncatedExpect(snapId));
603
604
  }
604
605
  /**
605
606
  * Stops the given snap, removes all hooks, closes all connections, and
@@ -659,7 +660,7 @@ class SnapController extends base_controller_1.BaseController {
659
660
  * @param snapId - The snap to terminate.
660
661
  */
661
662
  async #terminateSnap(snapId) {
662
- await this.messagingSystem.call('ExecutionService:terminateSnap', snapId);
663
+ await this.messenger.call('ExecutionService:terminateSnap', snapId);
663
664
  // Hack to give up execution for a bit to let gracefully terminating Snaps return.
664
665
  await new Promise((resolve) => setTimeout(resolve, 1));
665
666
  const runtime = this.#getRuntimeExpect(snapId);
@@ -669,7 +670,7 @@ class SnapController extends base_controller_1.BaseController {
669
670
  .forEach((pendingRequest) => pendingRequest.timer.finish());
670
671
  // Hack to give up execution for a bit to let timed out requests return.
671
672
  await new Promise((resolve) => setTimeout(resolve, 1));
672
- this.messagingSystem.publish('SnapController:snapTerminated', this.getTruncatedExpect(snapId));
673
+ this.messenger.publish('SnapController:snapTerminated', this.getTruncatedExpect(snapId));
673
674
  }
674
675
  /**
675
676
  * Returns whether the given snap is running.
@@ -1054,7 +1055,7 @@ class SnapController extends base_controller_1.BaseController {
1054
1055
  });
1055
1056
  // If the snap has been fully installed before, also emit snapUninstalled.
1056
1057
  if (snap.status !== snaps_utils_1.SnapStatus.Installing) {
1057
- this.messagingSystem.publish(`SnapController:snapUninstalled`, truncated);
1058
+ this.messenger.publish(`SnapController:snapUninstalled`, truncated);
1058
1059
  }
1059
1060
  }));
1060
1061
  }
@@ -1070,7 +1071,7 @@ class SnapController extends base_controller_1.BaseController {
1070
1071
  }
1071
1072
  }
1072
1073
  #addSnapToSubject(origin, snapId) {
1073
- const subjectPermissions = this.messagingSystem.call('PermissionController:getPermissions', origin);
1074
+ const subjectPermissions = this.messenger.call('PermissionController:getPermissions', origin);
1074
1075
  const existingCaveat = subjectPermissions?.[snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY]?.caveats?.find((caveat) => caveat.type === snaps_utils_1.SnapCaveatType.SnapIds);
1075
1076
  const subjectHasSnap = Boolean(existingCaveat?.value?.[snapId]);
1076
1077
  // If the subject is already connected to the snap, this is a no-op.
@@ -1079,7 +1080,7 @@ class SnapController extends base_controller_1.BaseController {
1079
1080
  }
1080
1081
  // If an existing caveat exists, we add the snap to that.
1081
1082
  if (existingCaveat) {
1082
- this.messagingSystem.call('PermissionController:updateCaveat', origin, snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY, snaps_utils_1.SnapCaveatType.SnapIds, { ...existingCaveat.value, [snapId]: {} });
1083
+ this.messenger.call('PermissionController:updateCaveat', origin, snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY, snaps_utils_1.SnapCaveatType.SnapIds, { ...existingCaveat.value, [snapId]: {} });
1083
1084
  return;
1084
1085
  }
1085
1086
  const approvedPermissions = {
@@ -1094,7 +1095,7 @@ class SnapController extends base_controller_1.BaseController {
1094
1095
  ],
1095
1096
  },
1096
1097
  };
1097
- this.messagingSystem.call('PermissionController:grantPermissions', {
1098
+ this.messenger.call('PermissionController:grantPermissions', {
1098
1099
  approvedPermissions,
1099
1100
  subject: { origin },
1100
1101
  });
@@ -1106,7 +1107,7 @@ class SnapController extends base_controller_1.BaseController {
1106
1107
  * @param snapId - The id of the snap to remove.
1107
1108
  */
1108
1109
  removeSnapFromSubject(origin, snapId) {
1109
- const subjectPermissions = this.messagingSystem.call('PermissionController:getPermissions', origin);
1110
+ const subjectPermissions = this.messenger.call('PermissionController:getPermissions', origin);
1110
1111
  const snapIdsCaveat = subjectPermissions?.[snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY]?.caveats?.find((caveat) => caveat.type === snaps_utils_1.SnapCaveatType.SnapIds);
1111
1112
  if (!snapIdsCaveat) {
1112
1113
  return;
@@ -1118,10 +1119,10 @@ class SnapController extends base_controller_1.BaseController {
1118
1119
  };
1119
1120
  delete newCaveatValue[snapId];
1120
1121
  if (Object.keys(newCaveatValue).length > 0) {
1121
- this.messagingSystem.call('PermissionController:updateCaveat', origin, snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY, snaps_utils_1.SnapCaveatType.SnapIds, newCaveatValue);
1122
+ this.messenger.call('PermissionController:updateCaveat', origin, snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY, snaps_utils_1.SnapCaveatType.SnapIds, newCaveatValue);
1122
1123
  }
1123
1124
  else {
1124
- this.messagingSystem.call('PermissionController:revokePermissions', {
1125
+ this.messenger.call('PermissionController:revokePermissions', {
1125
1126
  [origin]: [snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY],
1126
1127
  });
1127
1128
  }
@@ -1136,7 +1137,7 @@ class SnapController extends base_controller_1.BaseController {
1136
1137
  */
1137
1138
  revokeDynamicSnapPermissions(snapId, permissionNames) {
1138
1139
  (0, utils_1.assert)(permissionNames.every((permissionName) => this.#dynamicPermissions.includes(permissionName)), 'Non-dynamic permissions cannot be revoked');
1139
- this.messagingSystem.call('PermissionController:revokePermissions', {
1140
+ this.messenger.call('PermissionController:revokePermissions', {
1140
1141
  [snapId]: permissionNames,
1141
1142
  });
1142
1143
  }
@@ -1146,7 +1147,7 @@ class SnapController extends base_controller_1.BaseController {
1146
1147
  * @param snapId - The id of the Snap.
1147
1148
  */
1148
1149
  #removeSnapFromSubjects(snapId) {
1149
- const subjects = this.messagingSystem.call('PermissionController:getSubjectNames');
1150
+ const subjects = this.messenger.call('PermissionController:getSubjectNames');
1150
1151
  for (const subject of subjects) {
1151
1152
  this.removeSnapFromSubject(subject, snapId);
1152
1153
  }
@@ -1157,8 +1158,8 @@ class SnapController extends base_controller_1.BaseController {
1157
1158
  * @param snapId - The snap ID.
1158
1159
  */
1159
1160
  #revokeAllSnapPermissions(snapId) {
1160
- if (this.messagingSystem.call('PermissionController:hasPermissions', snapId)) {
1161
- this.messagingSystem.call('PermissionController:revokeAllPermissions', snapId);
1161
+ if (this.messenger.call('PermissionController:hasPermissions', snapId)) {
1162
+ this.messenger.call('PermissionController:revokeAllPermissions', snapId);
1162
1163
  }
1163
1164
  }
1164
1165
  /**
@@ -1203,7 +1204,7 @@ class SnapController extends base_controller_1.BaseController {
1203
1204
  * @returns The serialized permitted snaps for the origin.
1204
1205
  */
1205
1206
  getPermittedSnaps(origin) {
1206
- const permissions = this.messagingSystem.call('PermissionController:getPermissions', origin) ?? {};
1207
+ const permissions = this.messenger.call('PermissionController:getPermissions', origin) ?? {};
1207
1208
  const snaps = permissions[snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY]?.caveats?.find((caveat) => caveat.type === snaps_utils_1.SnapCaveatType.SnapIds)?.value ?? {};
1208
1209
  return Object.keys(snaps).reduce((permittedSnaps, snapId) => {
1209
1210
  const snap = this.get(snapId);
@@ -1266,8 +1267,8 @@ class SnapController extends base_controller_1.BaseController {
1266
1267
  result[snapId] = await this.#processRequestedSnap(origin, snapId, location, version);
1267
1268
  }
1268
1269
  // Once we finish all installs / updates, emit events.
1269
- pendingInstalls.forEach((snapId) => this.messagingSystem.publish(`SnapController:snapInstalled`, this.getTruncatedExpect(snapId), origin, false));
1270
- pendingUpdates.forEach(({ snapId, oldVersion }) => this.messagingSystem.publish(`SnapController:snapUpdated`, this.getTruncatedExpect(snapId), oldVersion, origin, false));
1270
+ pendingInstalls.forEach((snapId) => this.messenger.publish(`SnapController:snapInstalled`, this.getTruncatedExpect(snapId), origin, false));
1271
+ pendingUpdates.forEach(({ snapId, oldVersion }) => this.messenger.publish(`SnapController:snapUpdated`, this.getTruncatedExpect(snapId), oldVersion, origin, false));
1271
1272
  snapIds.forEach((snapId) => this.#rollbackSnapshots.delete(snapId));
1272
1273
  }
1273
1274
  catch (error) {
@@ -1312,7 +1313,7 @@ class SnapController extends base_controller_1.BaseController {
1312
1313
  snapId,
1313
1314
  type: exports.SNAP_APPROVAL_INSTALL,
1314
1315
  });
1315
- this.messagingSystem.publish('SnapController:snapInstallStarted', snapId, origin, false);
1316
+ this.messenger.publish('SnapController:snapInstallStarted', snapId, origin, false);
1316
1317
  // Existing snaps must be stopped before overwriting
1317
1318
  if (existingSnap && this.isRunning(snapId)) {
1318
1319
  await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Stop);
@@ -1353,13 +1354,13 @@ class SnapController extends base_controller_1.BaseController {
1353
1354
  type: exports.SNAP_APPROVAL_INSTALL,
1354
1355
  error: errorString,
1355
1356
  });
1356
- this.messagingSystem.publish('SnapController:snapInstallFailed', snapId, origin, false, errorString);
1357
+ this.messenger.publish('SnapController:snapInstallFailed', snapId, origin, false, errorString);
1357
1358
  throw error;
1358
1359
  }
1359
1360
  }
1360
1361
  #createApproval({ origin, snapId, type, }) {
1361
1362
  const id = (0, nanoid_1.nanoid)();
1362
- const promise = this.messagingSystem.call('ApprovalController:addRequest', {
1363
+ const promise = this.messenger.call('ApprovalController:addRequest', {
1363
1364
  origin,
1364
1365
  id,
1365
1366
  type,
@@ -1376,7 +1377,7 @@ class SnapController extends base_controller_1.BaseController {
1376
1377
  }
1377
1378
  #updateApproval(id, requestState) {
1378
1379
  try {
1379
- this.messagingSystem.call('ApprovalController:updateRequestState', {
1380
+ this.messenger.call('ApprovalController:updateRequestState', {
1380
1381
  id,
1381
1382
  requestState,
1382
1383
  });
@@ -1422,7 +1423,7 @@ class SnapController extends base_controller_1.BaseController {
1422
1423
  type: exports.SNAP_APPROVAL_UPDATE,
1423
1424
  });
1424
1425
  try {
1425
- this.messagingSystem.publish('SnapController:snapInstallStarted', snapId, origin, true);
1426
+ this.messenger.publish('SnapController:snapInstallStarted', snapId, origin, true);
1426
1427
  const oldManifest = snap.manifest;
1427
1428
  const newSnap = await (0, utils_2.fetchSnap)(snapId, location);
1428
1429
  const { sourceCode: sourceCodeFile, manifest: manifestFile } = newSnap;
@@ -1530,12 +1531,12 @@ class SnapController extends base_controller_1.BaseController {
1530
1531
  type: exports.SNAP_APPROVAL_UPDATE,
1531
1532
  });
1532
1533
  }
1533
- this.messagingSystem.publish('SnapController:snapInstallFailed', snapId, origin, true, errorString);
1534
+ this.messenger.publish('SnapController:snapInstallFailed', snapId, origin, true, errorString);
1534
1535
  throw error;
1535
1536
  }
1536
1537
  }
1537
1538
  async #resolveAllowlistVersion(snapId, versionRange) {
1538
- return await this.messagingSystem.call('SnapsRegistry:resolveVersion', snapId, versionRange);
1539
+ return await this.messenger.call('SnapsRegistry:resolveVersion', snapId, versionRange);
1539
1540
  }
1540
1541
  /**
1541
1542
  * Returns a promise representing the complete installation of the requested snap.
@@ -1598,7 +1599,7 @@ class SnapController extends base_controller_1.BaseController {
1598
1599
  }
1599
1600
  try {
1600
1601
  const runtime = this.#getRuntimeExpect(snapId);
1601
- const result = await this.messagingSystem.call('ExecutionService:executeSnap', {
1602
+ const result = await this.messenger.call('ExecutionService:executeSnap', {
1602
1603
  ...snapData,
1603
1604
  endowments: await this.#getEndowments(snapId),
1604
1605
  });
@@ -1626,8 +1627,8 @@ class SnapController extends base_controller_1.BaseController {
1626
1627
  async #getEndowments(snapId) {
1627
1628
  let allEndowments = [];
1628
1629
  for (const permissionName of this.#environmentEndowmentPermissions) {
1629
- if (this.messagingSystem.call('PermissionController:hasPermission', snapId, permissionName)) {
1630
- const endowments = await this.messagingSystem.call('PermissionController:getEndowments', snapId, permissionName);
1630
+ if (this.messenger.call('PermissionController:hasPermission', snapId, permissionName)) {
1631
+ const endowments = await this.messenger.call('PermissionController:getEndowments', snapId, permissionName);
1631
1632
  if (endowments) {
1632
1633
  // We don't have any guarantees about the type of the endowments
1633
1634
  // value, so we have to guard at runtime.
@@ -1727,7 +1728,7 @@ class SnapController extends base_controller_1.BaseController {
1727
1728
  // In case the Snap uses a localized manifest, we need to get the
1728
1729
  // proposed name from the localized manifest.
1729
1730
  const { proposedName } = (0, snaps_utils_1.getLocalizedSnapManifest)(manifest.result, 'en', localizedFiles);
1730
- this.messagingSystem.call('SubjectMetadataController:addSubjectMetadata', {
1731
+ this.messenger.call('SubjectMetadataController:addSubjectMetadata', {
1731
1732
  subjectType: permission_controller_1.SubjectType.Snap,
1732
1733
  name: proposedName,
1733
1734
  origin: snap.id,
@@ -1813,11 +1814,11 @@ class SnapController extends base_controller_1.BaseController {
1813
1814
  clearTimeout(this.#timeoutForLastRequestStatus);
1814
1815
  }
1815
1816
  /* eslint-disable @typescript-eslint/unbound-method */
1816
- this.messagingSystem.unsubscribe('ExecutionService:unhandledError', this._onUnhandledSnapError);
1817
- this.messagingSystem.unsubscribe('ExecutionService:outboundRequest', this._onOutboundRequest);
1818
- this.messagingSystem.unsubscribe('ExecutionService:outboundResponse', this._onOutboundResponse);
1819
- this.messagingSystem.clearEventSubscriptions('SnapController:snapInstalled');
1820
- this.messagingSystem.clearEventSubscriptions('SnapController:snapUpdated');
1817
+ this.messenger.unsubscribe('ExecutionService:unhandledError', this._onUnhandledSnapError);
1818
+ this.messenger.unsubscribe('ExecutionService:outboundRequest', this._onOutboundRequest);
1819
+ this.messenger.unsubscribe('ExecutionService:outboundResponse', this._onOutboundResponse);
1820
+ this.messenger.clearEventSubscriptions('SnapController:snapInstalled');
1821
+ this.messenger.clearEventSubscriptions('SnapController:snapUpdated');
1821
1822
  /* eslint-enable @typescript-eslint/unbound-method */
1822
1823
  }
1823
1824
  /**
@@ -1843,7 +1844,7 @@ class SnapController extends base_controller_1.BaseController {
1843
1844
  (0, utils_1.assertIsJsonRpcRequest)(request);
1844
1845
  const permissionName = snaps_rpc_methods_1.handlerEndowments[handlerType];
1845
1846
  (0, utils_1.assert)(typeof permissionName === 'string' || permissionName === null, "'permissionName' must be either a string or null.");
1846
- const permissions = this.messagingSystem.call('PermissionController:getPermissions', snapId);
1847
+ const permissions = this.messenger.call('PermissionController:getPermissions', snapId);
1847
1848
  // If permissionName is null, the handler does not require a permission.
1848
1849
  if (permissionName !== null &&
1849
1850
  (!permissions || !(0, utils_1.hasProperty)(permissions, permissionName))) {
@@ -1855,7 +1856,7 @@ class SnapController extends base_controller_1.BaseController {
1855
1856
  if (permissionName === snaps_rpc_methods_1.SnapEndowments.Rpc ||
1856
1857
  permissionName === snaps_rpc_methods_1.SnapEndowments.Keyring) {
1857
1858
  (0, utils_1.assert)(handlerPermissions);
1858
- const subject = this.messagingSystem.call('SubjectMetadataController:getSubjectMetadata', origin);
1859
+ const subject = this.messenger.call('SubjectMetadataController:getSubjectMetadata', origin);
1859
1860
  const origins = permissionName === snaps_rpc_methods_1.SnapEndowments.Rpc
1860
1861
  ? (0, snaps_rpc_methods_1.getRpcCaveatOrigins)(handlerPermissions)
1861
1862
  : (0, snaps_rpc_methods_1.getKeyringCaveatOrigins)(handlerPermissions);
@@ -1893,7 +1894,7 @@ class SnapController extends base_controller_1.BaseController {
1893
1894
  const transformedRequest = this.#transformSnapRpcRequest(snapId, handlerType, request);
1894
1895
  const timer = new Timer_1.Timer(timeout);
1895
1896
  this.#recordSnapRpcRequestStart(snapId, transformedRequest.id, timer);
1896
- const handleRpcRequestPromise = this.messagingSystem.call('ExecutionService:handleRpcRequest', snapId, { origin, handler: handlerType, request: transformedRequest });
1897
+ const handleRpcRequestPromise = this.messenger.call('ExecutionService:handleRpcRequest', snapId, { origin, handler: handlerType, request: transformedRequest });
1897
1898
  // This will either get the result or reject due to the timeout.
1898
1899
  try {
1899
1900
  const result = await (0, utils_2.withTimeout)(handleRpcRequestPromise, timer);
@@ -1957,11 +1958,11 @@ class SnapController extends base_controller_1.BaseController {
1957
1958
  * @returns An identifier that can be used to identify the interface.
1958
1959
  */
1959
1960
  async #createInterface(snapId, content, contentType) {
1960
- return this.messagingSystem.call('SnapInterfaceController:createInterface', snapId, content, undefined, contentType);
1961
+ return this.messenger.call('SnapInterfaceController:createInterface', snapId, content, undefined, contentType);
1961
1962
  }
1962
1963
  #assertInterfaceExists(snapId, id) {
1963
1964
  // This will throw if the interface isn't accessible, but we assert nevertheless.
1964
- (0, utils_1.assert)(this.messagingSystem.call('SnapInterfaceController:getInterface', snapId, id));
1965
+ (0, utils_1.assert)(this.messenger.call('SnapInterfaceController:getInterface', snapId, id));
1965
1966
  }
1966
1967
  /**
1967
1968
  * Transform a RPC response if necessary.
@@ -2015,7 +2016,7 @@ class SnapController extends base_controller_1.BaseController {
2015
2016
  * @returns The transformed result.
2016
2017
  */
2017
2018
  #transformOnAssetsLookupResult(snapId, { params: requestedParams }, { assets }) {
2018
- const permissions = this.messagingSystem.call('PermissionController:getPermissions', snapId);
2019
+ const permissions = this.messenger.call('PermissionController:getPermissions', snapId);
2019
2020
  // We know the permissions are guaranteed to be set here.
2020
2021
  (0, utils_1.assert)(permissions);
2021
2022
  const permission = permissions[snaps_rpc_methods_1.SnapEndowments.Assets];
@@ -2098,7 +2099,7 @@ class SnapController extends base_controller_1.BaseController {
2098
2099
  case snaps_utils_1.HandlerType.OnUserInput: {
2099
2100
  (0, utils_1.assert)(request.params && (0, utils_1.hasProperty)(request.params, 'id'));
2100
2101
  const interfaceId = request.params.id;
2101
- const { context } = this.messagingSystem.call('SnapInterfaceController:getInterface', snapId, interfaceId);
2102
+ const { context } = this.messenger.call('SnapInterfaceController:getInterface', snapId, interfaceId);
2102
2103
  return {
2103
2104
  ...request,
2104
2105
  params: { ...request.params, context },
@@ -2254,7 +2255,7 @@ class SnapController extends base_controller_1.BaseController {
2254
2255
  // Calling this in reverse order to undo the changes
2255
2256
  this.#handleInitialConnections(snapId, newInitialConnections ?? null, previousInitialConnections ?? {});
2256
2257
  const truncatedSnap = this.getTruncatedExpect(snapId);
2257
- this.messagingSystem.publish('SnapController:snapRolledback', truncatedSnap, rollbackSnapshot.newVersion);
2258
+ this.messenger.publish('SnapController:snapRolledback', truncatedSnap, rollbackSnapshot.newVersion);
2258
2259
  this.#rollbackSnapshots.delete(snapId);
2259
2260
  }
2260
2261
  /**
@@ -2303,19 +2304,48 @@ class SnapController extends base_controller_1.BaseController {
2303
2304
  getStateMutex: new async_mutex_1.Mutex(),
2304
2305
  });
2305
2306
  }
2307
+ /**
2308
+ * Get the desired permissions including dynamic permissions. That is, if a
2309
+ * dynamic permission was previously granted and at least one of its
2310
+ * dependencies is still desired, it will be included in the desired
2311
+ * permissions.
2312
+ *
2313
+ * @param oldPermissions - The old permissions.
2314
+ * @param desiredPermissions - The desired permissions.
2315
+ * @returns The desired permissions including dynamic permissions.
2316
+ */
2317
+ #getDesiredPermissions(oldPermissions, desiredPermissions) {
2318
+ return Object.keys(oldPermissions).reduce((accumulator, permissionName) => {
2319
+ if (this.#dynamicPermissions.includes(permissionName)) {
2320
+ const hasDependencies = (0, utils_1.hasProperty)(constants_1.DYNAMIC_PERMISSION_DEPENDENCIES, permissionName);
2321
+ const hasDependency = constants_1.DYNAMIC_PERMISSION_DEPENDENCIES[permissionName]?.some((dependency) => (0, utils_1.hasProperty)(desiredPermissions, dependency));
2322
+ // If the permission doesn't have dependencies, or if at least one of
2323
+ // its dependencies is desired, include it in the desired permissions.
2324
+ // NOTE: This effectively means that any permissions granted in the manifest
2325
+ // that are considered dynamic, will not be automatically revoked
2326
+ // when the permission is removed from the manifest.
2327
+ // TODO: Deal with this technical debt.
2328
+ if (!hasDependencies || hasDependency) {
2329
+ accumulator[permissionName] = oldPermissions[permissionName];
2330
+ }
2331
+ }
2332
+ return accumulator;
2333
+ }, desiredPermissions);
2334
+ }
2306
2335
  #calculatePermissionsChange(snapId, desiredPermissionsSet) {
2307
- const oldPermissions = this.messagingSystem.call('PermissionController:getPermissions', snapId) ?? {};
2308
- const newPermissions = (0, utils_2.permissionsDiff)(desiredPermissionsSet, oldPermissions);
2309
- // TODO(ritave): The assumption that these are unused only holds so long as we do not
2310
- // permit dynamic permission requests.
2311
- const unusedPermissions = (0, utils_2.permissionsDiff)(oldPermissions, desiredPermissionsSet);
2336
+ const oldPermissions = this.messenger.call('PermissionController:getPermissions', snapId) ?? {};
2337
+ const desiredPermissionsSetWithDynamic = this.#getDesiredPermissions(oldPermissions, desiredPermissionsSet);
2338
+ const newPermissions = (0, utils_2.permissionsDiff)(desiredPermissionsSetWithDynamic, oldPermissions);
2339
+ // TODO: The assumption that these are unused only holds so long as we do
2340
+ // not permit dynamic permission requests.
2341
+ const unusedPermissions = (0, utils_2.permissionsDiff)(oldPermissions, desiredPermissionsSetWithDynamic);
2312
2342
  // It's a Set Intersection of oldPermissions and desiredPermissionsSet
2313
2343
  // oldPermissions ∖ (oldPermissions ∖ desiredPermissionsSet) ⟺ oldPermissions ∩ desiredPermissionsSet
2314
2344
  const approvedPermissions = (0, utils_2.permissionsDiff)(oldPermissions, unusedPermissions);
2315
2345
  return { newPermissions, unusedPermissions, approvedPermissions };
2316
2346
  }
2317
2347
  #isSubjectConnectedToSnap(snapId, origin) {
2318
- const subjectPermissions = this.messagingSystem.call('PermissionController:getPermissions', origin);
2348
+ const subjectPermissions = this.messenger.call('PermissionController:getPermissions', origin);
2319
2349
  const existingCaveat = subjectPermissions?.[snaps_rpc_methods_1.WALLET_SNAP_PERMISSION_KEY]?.caveats?.find((caveat) => caveat.type === snaps_utils_1.SnapCaveatType.SnapIds);
2320
2350
  return Boolean(existingCaveat?.value?.[snapId]);
2321
2351
  }
@@ -2335,46 +2365,6 @@ class SnapController extends base_controller_1.BaseController {
2335
2365
  const approvedConnections = (0, utils_2.setDiff)(filteredOldConnections, unusedConnections);
2336
2366
  return { newConnections, unusedConnections, approvedConnections };
2337
2367
  }
2338
- /**
2339
- * Get the permissions to grant to a Snap following an install, update or
2340
- * rollback.
2341
- *
2342
- * @param snapId - The snap ID.
2343
- * @param newPermissions - The new permissions to be granted.
2344
- * @returns The permissions to grant to the Snap.
2345
- */
2346
- #getPermissionsToGrant(snapId, newPermissions) {
2347
- if (Object.keys(newPermissions).includes(snaps_rpc_methods_1.SnapEndowments.EthereumProvider)) {
2348
- // This will return the globally selected network if the Snap doesn't have
2349
- // one set.
2350
- const networkClientId = this.messagingSystem.call('SelectedNetworkController:getNetworkClientIdForDomain', snapId);
2351
- const { configuration } = this.messagingSystem.call('NetworkController:getNetworkClientById', networkClientId);
2352
- const chainId = (0, utils_1.hexToNumber)(configuration.chainId);
2353
- // This needs to be assigned to have proper type inference.
2354
- const modifiedPermissions = {
2355
- ...newPermissions,
2356
- 'endowment:caip25': {
2357
- caveats: [
2358
- {
2359
- type: 'authorizedScopes',
2360
- value: {
2361
- requiredScopes: {},
2362
- optionalScopes: {
2363
- [`eip155:${chainId}`]: {
2364
- accounts: [],
2365
- },
2366
- },
2367
- sessionProperties: {},
2368
- isMultichainOrigin: false,
2369
- },
2370
- },
2371
- ],
2372
- },
2373
- };
2374
- return modifiedPermissions;
2375
- }
2376
- return newPermissions;
2377
- }
2378
2368
  /**
2379
2369
  * Update the permissions for a snap following an install, update or rollback.
2380
2370
  *
@@ -2389,14 +2379,13 @@ class SnapController extends base_controller_1.BaseController {
2389
2379
  #updatePermissions({ snapId, unusedPermissions = {}, newPermissions = {}, requestData, }) {
2390
2380
  const unusedPermissionsKeys = Object.keys(unusedPermissions);
2391
2381
  if ((0, utils_1.isNonEmptyArray)(unusedPermissionsKeys)) {
2392
- this.messagingSystem.call('PermissionController:revokePermissions', {
2382
+ this.messenger.call('PermissionController:revokePermissions', {
2393
2383
  [snapId]: unusedPermissionsKeys,
2394
2384
  });
2395
2385
  }
2396
2386
  if ((0, utils_1.isNonEmptyArray)(Object.keys(newPermissions))) {
2397
- const approvedPermissions = this.#getPermissionsToGrant(snapId, newPermissions);
2398
- this.messagingSystem.call('PermissionController:grantPermissions', {
2399
- approvedPermissions,
2387
+ this.messenger.call('PermissionController:grantPermissions', {
2388
+ approvedPermissions: newPermissions,
2400
2389
  subject: { origin: snapId },
2401
2390
  requestData,
2402
2391
  });
@@ -2437,7 +2426,7 @@ class SnapController extends base_controller_1.BaseController {
2437
2426
  #callLifecycleHooks(origin, handler) {
2438
2427
  const snaps = this.getRunnableSnaps();
2439
2428
  for (const { id } of snaps) {
2440
- const hasLifecycleHooksEndowment = this.messagingSystem.call('PermissionController:hasPermission', id, snaps_rpc_methods_1.SnapEndowments.LifecycleHooks);
2429
+ const hasLifecycleHooksEndowment = this.messenger.call('PermissionController:hasPermission', id, snaps_rpc_methods_1.SnapEndowments.LifecycleHooks);
2441
2430
  if (!hasLifecycleHooksEndowment) {
2442
2431
  continue;
2443
2432
  }
@@ -2460,7 +2449,7 @@ class SnapController extends base_controller_1.BaseController {
2460
2449
  async #callLifecycleHook(origin, snapId, handler) {
2461
2450
  const permissionName = snaps_rpc_methods_1.handlerEndowments[handler];
2462
2451
  (0, utils_1.assert)(permissionName, 'Lifecycle hook must have an endowment.');
2463
- const hasPermission = this.messagingSystem.call('PermissionController:hasPermission', snapId, permissionName);
2452
+ const hasPermission = this.messenger.call('PermissionController:hasPermission', snapId, permissionName);
2464
2453
  if (!hasPermission) {
2465
2454
  return;
2466
2455
  }