@metamask/snaps-controllers 12.1.0 → 12.3.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 (94) hide show
  1. package/CHANGELOG.md +27 -1
  2. package/dist/cronjob/CronjobController.cjs +13 -4
  3. package/dist/cronjob/CronjobController.cjs.map +1 -1
  4. package/dist/cronjob/CronjobController.d.cts.map +1 -1
  5. package/dist/cronjob/CronjobController.d.mts.map +1 -1
  6. package/dist/cronjob/CronjobController.mjs +15 -6
  7. package/dist/cronjob/CronjobController.mjs.map +1 -1
  8. package/dist/interface/SnapInterfaceController.cjs +15 -1
  9. package/dist/interface/SnapInterfaceController.cjs.map +1 -1
  10. package/dist/interface/SnapInterfaceController.d.cts +10 -2
  11. package/dist/interface/SnapInterfaceController.d.cts.map +1 -1
  12. package/dist/interface/SnapInterfaceController.d.mts +10 -2
  13. package/dist/interface/SnapInterfaceController.d.mts.map +1 -1
  14. package/dist/interface/SnapInterfaceController.mjs +17 -3
  15. package/dist/interface/SnapInterfaceController.mjs.map +1 -1
  16. package/dist/interface/utils.cjs +104 -4
  17. package/dist/interface/utils.cjs.map +1 -1
  18. package/dist/interface/utils.d.cts +71 -2
  19. package/dist/interface/utils.d.cts.map +1 -1
  20. package/dist/interface/utils.d.mts +71 -2
  21. package/dist/interface/utils.d.mts.map +1 -1
  22. package/dist/interface/utils.mjs +101 -5
  23. package/dist/interface/utils.mjs.map +1 -1
  24. package/dist/multichain/MultichainRouter.cjs +1 -0
  25. package/dist/multichain/MultichainRouter.cjs.map +1 -1
  26. package/dist/multichain/MultichainRouter.d.cts +1 -0
  27. package/dist/multichain/MultichainRouter.d.cts.map +1 -1
  28. package/dist/multichain/MultichainRouter.d.mts +1 -0
  29. package/dist/multichain/MultichainRouter.d.mts.map +1 -1
  30. package/dist/multichain/MultichainRouter.mjs +1 -0
  31. package/dist/multichain/MultichainRouter.mjs.map +1 -1
  32. package/dist/services/AbstractExecutionService.cjs +127 -202
  33. package/dist/services/AbstractExecutionService.cjs.map +1 -1
  34. package/dist/services/AbstractExecutionService.d.cts +8 -53
  35. package/dist/services/AbstractExecutionService.d.cts.map +1 -1
  36. package/dist/services/AbstractExecutionService.d.mts +8 -53
  37. package/dist/services/AbstractExecutionService.d.mts.map +1 -1
  38. package/dist/services/AbstractExecutionService.mjs +127 -202
  39. package/dist/services/AbstractExecutionService.mjs.map +1 -1
  40. package/dist/services/iframe/IframeExecutionService.cjs +2 -2
  41. package/dist/services/iframe/IframeExecutionService.cjs.map +1 -1
  42. package/dist/services/iframe/IframeExecutionService.d.cts +1 -1
  43. package/dist/services/iframe/IframeExecutionService.d.cts.map +1 -1
  44. package/dist/services/iframe/IframeExecutionService.d.mts +1 -1
  45. package/dist/services/iframe/IframeExecutionService.d.mts.map +1 -1
  46. package/dist/services/iframe/IframeExecutionService.mjs +2 -2
  47. package/dist/services/iframe/IframeExecutionService.mjs.map +1 -1
  48. package/dist/services/offscreen/OffscreenExecutionService.cjs +5 -5
  49. package/dist/services/offscreen/OffscreenExecutionService.cjs.map +1 -1
  50. package/dist/services/offscreen/OffscreenExecutionService.d.cts +4 -4
  51. package/dist/services/offscreen/OffscreenExecutionService.d.cts.map +1 -1
  52. package/dist/services/offscreen/OffscreenExecutionService.d.mts +4 -4
  53. package/dist/services/offscreen/OffscreenExecutionService.d.mts.map +1 -1
  54. package/dist/services/offscreen/OffscreenExecutionService.mjs +5 -5
  55. package/dist/services/offscreen/OffscreenExecutionService.mjs.map +1 -1
  56. package/dist/services/proxy/ProxyExecutionService.cjs +6 -6
  57. package/dist/services/proxy/ProxyExecutionService.cjs.map +1 -1
  58. package/dist/services/proxy/ProxyExecutionService.d.cts +4 -4
  59. package/dist/services/proxy/ProxyExecutionService.d.cts.map +1 -1
  60. package/dist/services/proxy/ProxyExecutionService.d.mts +4 -4
  61. package/dist/services/proxy/ProxyExecutionService.d.mts.map +1 -1
  62. package/dist/services/proxy/ProxyExecutionService.mjs +6 -6
  63. package/dist/services/proxy/ProxyExecutionService.mjs.map +1 -1
  64. package/dist/services/webview/WebViewExecutionService.cjs +6 -6
  65. package/dist/services/webview/WebViewExecutionService.cjs.map +1 -1
  66. package/dist/services/webview/WebViewExecutionService.d.cts +5 -5
  67. package/dist/services/webview/WebViewExecutionService.d.cts.map +1 -1
  68. package/dist/services/webview/WebViewExecutionService.d.mts +5 -5
  69. package/dist/services/webview/WebViewExecutionService.d.mts.map +1 -1
  70. package/dist/services/webview/WebViewExecutionService.mjs +6 -6
  71. package/dist/services/webview/WebViewExecutionService.mjs.map +1 -1
  72. package/dist/snaps/SnapController.cjs +60 -72
  73. package/dist/snaps/SnapController.cjs.map +1 -1
  74. package/dist/snaps/SnapController.d.cts +19 -10
  75. package/dist/snaps/SnapController.d.cts.map +1 -1
  76. package/dist/snaps/SnapController.d.mts +19 -10
  77. package/dist/snaps/SnapController.d.mts.map +1 -1
  78. package/dist/snaps/SnapController.mjs +61 -73
  79. package/dist/snaps/SnapController.mjs.map +1 -1
  80. package/dist/snaps/registry/json.cjs +4 -2
  81. package/dist/snaps/registry/json.cjs.map +1 -1
  82. package/dist/snaps/registry/json.d.cts.map +1 -1
  83. package/dist/snaps/registry/json.d.mts.map +1 -1
  84. package/dist/snaps/registry/json.mjs +4 -2
  85. package/dist/snaps/registry/json.mjs.map +1 -1
  86. package/package.json +4 -4
  87. package/dist/snaps/RequestQueue.cjs +0 -44
  88. package/dist/snaps/RequestQueue.cjs.map +0 -1
  89. package/dist/snaps/RequestQueue.d.cts +0 -25
  90. package/dist/snaps/RequestQueue.d.cts.map +0 -1
  91. package/dist/snaps/RequestQueue.d.mts +0 -25
  92. package/dist/snaps/RequestQueue.d.mts.map +0 -1
  93. package/dist/snaps/RequestQueue.mjs +0 -40
  94. package/dist/snaps/RequestQueue.mjs.map +0 -1
@@ -10,7 +10,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _SnapController_instances, _SnapController_closeAllConnections, _SnapController_dynamicPermissions, _SnapController_environmentEndowmentPermissions, _SnapController_excludedPermissions, _SnapController_featureFlags, _SnapController_fetchFunction, _SnapController_idleTimeCheckInterval, _SnapController_maxIdleTime, _SnapController_encryptor, _SnapController_getMnemonicSeed, _SnapController_getFeatureFlags, _SnapController_clientCryptography, _SnapController_detectSnapLocation, _SnapController_snapsRuntimeData, _SnapController_rollbackSnapshots, _SnapController_timeoutForLastRequestStatus, _SnapController_statusMachine, _SnapController_preinstalledSnaps, _SnapController_trackEvent, _SnapController_trackSnapExport, _SnapController_initializeStateMachine, _SnapController_registerMessageHandlers, _SnapController_handlePreinstalledSnaps, _SnapController_pollForLastRequestStatus, _SnapController_blockSnap, _SnapController_unblockSnap, _SnapController_assertIsInstallAllowed, _SnapController_assertCanInstallSnaps, _SnapController_assertCanUsePlatform, _SnapController_stopSnapsLastRequestPastMax, _SnapController_transition, _SnapController_terminateSnap, _SnapController_hasCachedEncryptionKey, _SnapController_getSnapEncryptionKey, _SnapController_decryptSnapState, _SnapController_encryptSnapState, _SnapController_getStateToPersist, _SnapController_persistSnapState, _SnapController_handleInitialConnections, _SnapController_addSnapToSubject, _SnapController_removeSnapFromSubjects, _SnapController_revokeAllSnapPermissions, _SnapController_createApproval, _SnapController_updateApproval, _SnapController_resolveAllowlistVersion, _SnapController_add, _SnapController_startSnap, _SnapController_getEndowments, _SnapController_set, _SnapController_validateSnapPermissions, _SnapController_validatePlatformVersion, _SnapController_getExecutionTimeout, _SnapController_getRpcRequestHandler, _SnapController_createInterface, _SnapController_assertInterfaceExists, _SnapController_transformSnapRpcResponse, _SnapController_transformOnAssetsLookupResult, _SnapController_transformOnAssetsConversionResult, _SnapController_transformSnapRpcRequest, _SnapController_assertSnapRpcResponse, _SnapController_recordSnapRpcRequestStart, _SnapController_recordSnapRpcRequestFinish, _SnapController_getRollbackSnapshot, _SnapController_createRollbackSnapshot, _SnapController_rollbackSnap, _SnapController_rollbackSnaps, _SnapController_getRuntime, _SnapController_getRuntimeExpect, _SnapController_setupRuntime, _SnapController_calculatePermissionsChange, _SnapController_isSubjectConnectedToSnap, _SnapController_calculateConnectionsChange, _SnapController_getPermissionsToGrant, _SnapController_updatePermissions, _SnapController_isValidUpdate, _SnapController_callLifecycleHook, _SnapController_handleLock;
13
+ var _SnapController_instances, _SnapController_closeAllConnections, _SnapController_dynamicPermissions, _SnapController_environmentEndowmentPermissions, _SnapController_excludedPermissions, _SnapController_featureFlags, _SnapController_fetchFunction, _SnapController_idleTimeCheckInterval, _SnapController_maxIdleTime, _SnapController_encryptor, _SnapController_getMnemonicSeed, _SnapController_getFeatureFlags, _SnapController_clientCryptography, _SnapController_detectSnapLocation, _SnapController_snapsRuntimeData, _SnapController_rollbackSnapshots, _SnapController_timeoutForLastRequestStatus, _SnapController_statusMachine, _SnapController_preinstalledSnaps, _SnapController_trackEvent, _SnapController_trackSnapExport, _SnapController_initializeStateMachine, _SnapController_registerMessageHandlers, _SnapController_handlePreinstalledSnaps, _SnapController_pollForLastRequestStatus, _SnapController_blockSnap, _SnapController_unblockSnap, _SnapController_assertIsInstallAllowed, _SnapController_assertCanInstallSnaps, _SnapController_assertCanUsePlatform, _SnapController_stopSnapsLastRequestPastMax, _SnapController_transition, _SnapController_terminateSnap, _SnapController_hasCachedEncryptionKey, _SnapController_getSnapEncryptionKey, _SnapController_decryptSnapState, _SnapController_encryptSnapState, _SnapController_getStateToPersist, _SnapController_persistSnapState, _SnapController_handleInitialConnections, _SnapController_addSnapToSubject, _SnapController_removeSnapFromSubjects, _SnapController_revokeAllSnapPermissions, _SnapController_createApproval, _SnapController_updateApproval, _SnapController_resolveAllowlistVersion, _SnapController_add, _SnapController_startSnap, _SnapController_getEndowments, _SnapController_set, _SnapController_validateSnapPermissions, _SnapController_validatePlatformVersion, _SnapController_getExecutionTimeout, _SnapController_createInterface, _SnapController_assertInterfaceExists, _SnapController_transformSnapRpcResponse, _SnapController_transformOnAssetsLookupResult, _SnapController_transformOnAssetsConversionResult, _SnapController_transformSnapRpcRequest, _SnapController_assertSnapRpcResponse, _SnapController_recordSnapRpcRequestStart, _SnapController_recordSnapRpcRequestFinish, _SnapController_getRollbackSnapshot, _SnapController_createRollbackSnapshot, _SnapController_rollbackSnap, _SnapController_rollbackSnaps, _SnapController_getRuntime, _SnapController_getRuntimeExpect, _SnapController_setupRuntime, _SnapController_calculatePermissionsChange, _SnapController_isSubjectConnectedToSnap, _SnapController_calculateConnectionsChange, _SnapController_getPermissionsToGrant, _SnapController_updatePermissions, _SnapController_isValidUpdate, _SnapController_callLifecycleHook, _SnapController_handleLock;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.SnapController = exports.SNAP_APPROVAL_RESULT = exports.SNAP_APPROVAL_UPDATE = exports.SNAP_APPROVAL_INSTALL = exports.controllerName = void 0;
16
16
  const base_controller_1 = require("@metamask/base-controller");
@@ -27,7 +27,6 @@ const semver_1 = require("semver");
27
27
  const constants_1 = require("./constants.cjs");
28
28
  const location_1 = require("./location/index.cjs");
29
29
  const registry_1 = require("./registry/index.cjs");
30
- const RequestQueue_1 = require("./RequestQueue.cjs");
31
30
  const selectors_1 = require("./selectors.cjs");
32
31
  const Timer_1 = require("./Timer.cjs");
33
32
  const fsm_2 = require("../fsm.cjs");
@@ -526,6 +525,22 @@ class SnapController extends base_controller_1.BaseController {
526
525
  (0, utils_1.assert)(encoded.length < snaps_utils_1.MAX_FILE_SIZE, `Failed to encode static file to "${encoding}": Static files must be less than 64 MB when encoded.`);
527
526
  return encoded;
528
527
  }
528
+ /**
529
+ * Determine if a given Snap ID supports a given minimum version of the Snaps platform
530
+ * by inspecting the platformVersion in the Snap manifest.
531
+ *
532
+ * @param snapId - The Snap ID.
533
+ * @param version - The version.
534
+ * @returns True if the platform version is equal or greater to the passed version, false otherwise.
535
+ */
536
+ isMinimumPlatformVersion(snapId, version) {
537
+ const snap = this.getExpect(snapId);
538
+ const { platformVersion } = snap.manifest;
539
+ if (!platformVersion) {
540
+ return false;
541
+ }
542
+ return (0, semver_1.gte)(platformVersion, version);
543
+ }
529
544
  /**
530
545
  * Completely clear the controller's state: delete all associated data,
531
546
  * handlers, event listeners, and permissions; tear down all snap providers.
@@ -1065,12 +1080,49 @@ class SnapController extends base_controller_1.BaseController {
1065
1080
  constants_1.CLIENT_ONLY_HANDLERS.includes(handlerType)) {
1066
1081
  throw new Error(`"${handlerType}" can only be invoked by MetaMask.`);
1067
1082
  }
1068
- const handler = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getRpcRequestHandler).call(this, snapId);
1069
- if (!handler) {
1070
- throw new Error(`Snap RPC message handler not found for snap "${snapId}".`);
1083
+ if (!this.state.snaps[snapId].enabled) {
1084
+ throw new Error(`Snap "${snapId}" is disabled.`);
1085
+ }
1086
+ if (this.state.snaps[snapId].status === snaps_utils_1.SnapStatus.Installing) {
1087
+ throw new Error(`Snap "${snapId}" is currently being installed. Please try again later.`);
1071
1088
  }
1072
1089
  const timeout = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getExecutionTimeout).call(this, handlerPermissions);
1073
- return handler({ origin, handler: handlerType, request, timeout });
1090
+ if (!this.isRunning(snapId)) {
1091
+ const runtime = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getRuntimeExpect).call(this, snapId);
1092
+ if (!runtime.startPromise) {
1093
+ runtime.startPromise = this.startSnap(snapId);
1094
+ }
1095
+ try {
1096
+ await runtime.startPromise;
1097
+ }
1098
+ finally {
1099
+ runtime.startPromise = null;
1100
+ }
1101
+ }
1102
+ const transformedRequest = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformSnapRpcRequest).call(this, snapId, handlerType, request);
1103
+ const timer = new Timer_1.Timer(timeout);
1104
+ __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestStart).call(this, snapId, transformedRequest.id, timer);
1105
+ const handleRpcRequestPromise = this.messagingSystem.call('ExecutionService:handleRpcRequest', snapId, { origin, handler: handlerType, request: transformedRequest });
1106
+ // This will either get the result or reject due to the timeout.
1107
+ try {
1108
+ const result = await (0, utils_2.withTimeout)(handleRpcRequestPromise, timer);
1109
+ if (result === utils_2.hasTimedOut) {
1110
+ throw new Error(`${snapId} failed to respond to the request in time.`);
1111
+ }
1112
+ await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_assertSnapRpcResponse).call(this, snapId, handlerType, result);
1113
+ const transformedResult = await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformSnapRpcResponse).call(this, snapId, handlerType, transformedRequest, result);
1114
+ __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id, handlerType, origin, true);
1115
+ return transformedResult;
1116
+ }
1117
+ catch (error) {
1118
+ // We flag the RPC request as finished early since termination may affect pending requests
1119
+ __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id, handlerType, origin, false);
1120
+ const [jsonRpcError, handled] = (0, snaps_utils_1.unwrapError)(error);
1121
+ if (!handled) {
1122
+ await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Crash);
1123
+ }
1124
+ throw jsonRpcError;
1125
+ }
1074
1126
  }
1075
1127
  }
1076
1128
  exports.SnapController = SnapController;
@@ -1147,6 +1199,7 @@ _SnapController_closeAllConnections = new WeakMap(), _SnapController_dynamicPerm
1147
1199
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:revokeDynamicPermissions`, (...args) => this.revokeDynamicSnapPermissions(...args));
1148
1200
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:getFile`, async (...args) => this.getSnapFile(...args));
1149
1201
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:stopAllSnaps`, async (...args) => this.stopAllSnaps(...args));
1202
+ this.messagingSystem.registerActionHandler(`${exports.controllerName}:isMinimumPlatformVersion`, (...args) => this.isMinimumPlatformVersion(...args));
1150
1203
  }, _SnapController_handlePreinstalledSnaps = function _SnapController_handlePreinstalledSnaps(preinstalledSnaps) {
1151
1204
  for (const { snapId, manifest, files, removable, hidden, hideSnapBranding, } of preinstalledSnaps) {
1152
1205
  const existingSnap = this.get(snapId);
@@ -1697,71 +1750,6 @@ async function _SnapController_getEndowments(snapId) {
1697
1750
  }
1698
1751
  }, _SnapController_getExecutionTimeout = function _SnapController_getExecutionTimeout(permission) {
1699
1752
  return (0, snaps_rpc_methods_1.getMaxRequestTimeCaveat)(permission) ?? this.maxRequestTime;
1700
- }, _SnapController_getRpcRequestHandler = function _SnapController_getRpcRequestHandler(snapId) {
1701
- const runtime = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getRuntimeExpect).call(this, snapId);
1702
- const existingHandler = runtime.rpcHandler;
1703
- if (existingHandler) {
1704
- return existingHandler;
1705
- }
1706
- const requestQueue = new RequestQueue_1.RequestQueue(100);
1707
- // We need to set up this promise map to map snapIds to their respective startPromises,
1708
- // because otherwise we would lose context on the correct startPromise.
1709
- const startPromises = new Map();
1710
- const rpcHandler = async ({ origin, handler: handlerType, request, timeout, }) => {
1711
- if (!this.state.snaps[snapId].enabled) {
1712
- throw new Error(`Snap "${snapId}" is disabled.`);
1713
- }
1714
- if (this.state.snaps[snapId].status === snaps_utils_1.SnapStatus.Installing) {
1715
- throw new Error(`Snap "${snapId}" is currently being installed. Please try again later.`);
1716
- }
1717
- if (!this.isRunning(snapId)) {
1718
- let localStartPromise = startPromises.get(snapId);
1719
- if (!localStartPromise) {
1720
- localStartPromise = this.startSnap(snapId);
1721
- startPromises.set(snapId, localStartPromise);
1722
- }
1723
- else if (requestQueue.get(origin) >= requestQueue.maxQueueSize) {
1724
- throw new Error('Exceeds maximum number of requests waiting to be resolved, please try again.');
1725
- }
1726
- requestQueue.increment(origin);
1727
- try {
1728
- await localStartPromise;
1729
- }
1730
- finally {
1731
- requestQueue.decrement(origin);
1732
- // Only delete startPromise for a snap if its value hasn't changed
1733
- if (startPromises.get(snapId) === localStartPromise) {
1734
- startPromises.delete(snapId);
1735
- }
1736
- }
1737
- }
1738
- const transformedRequest = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformSnapRpcRequest).call(this, snapId, handlerType, request);
1739
- const timer = new Timer_1.Timer(timeout);
1740
- __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestStart).call(this, snapId, transformedRequest.id, timer);
1741
- const handleRpcRequestPromise = this.messagingSystem.call('ExecutionService:handleRpcRequest', snapId, { origin, handler: handlerType, request: transformedRequest });
1742
- // This will either get the result or reject due to the timeout.
1743
- try {
1744
- const result = await (0, utils_2.withTimeout)(handleRpcRequestPromise, timer);
1745
- if (result === utils_2.hasTimedOut) {
1746
- throw new Error(`${snapId} failed to respond to the request in time.`);
1747
- }
1748
- await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_assertSnapRpcResponse).call(this, snapId, handlerType, result);
1749
- const transformedResult = await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformSnapRpcResponse).call(this, snapId, handlerType, transformedRequest, result);
1750
- __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id, handlerType, origin, true);
1751
- return transformedResult;
1752
- }
1753
- catch (error) {
1754
- // We flag the RPC request as finished early since termination may affect pending requests
1755
- __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id, handlerType, origin, false);
1756
- const [jsonRpcError, handled] = (0, snaps_utils_1.unwrapError)(error);
1757
- if (!handled) {
1758
- await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Crash);
1759
- }
1760
- throw jsonRpcError;
1761
- }
1762
- };
1763
- runtime.rpcHandler = rpcHandler;
1764
- return rpcHandler;
1765
1753
  }, _SnapController_createInterface =
1766
1754
  /**
1767
1755
  * Create a dynamic interface in the SnapInterfaceController.
@@ -2015,7 +2003,7 @@ async function _SnapController_rollbackSnaps(snapIds) {
2015
2003
  (0, fsm_2.forceStrict)(interpreter);
2016
2004
  __classPrivateFieldGet(this, _SnapController_snapsRuntimeData, "f").set(snapId, {
2017
2005
  lastRequest: null,
2018
- rpcHandler: null,
2006
+ startPromise: null,
2019
2007
  installPromise: null,
2020
2008
  encryptionKey: null,
2021
2009
  encryptionSalt: null,