@metamask/snaps-controllers 11.2.3 → 12.0.1

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 (92) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/dist/cronjob/CronjobController.cjs +6 -9
  3. package/dist/cronjob/CronjobController.cjs.map +1 -1
  4. package/dist/cronjob/CronjobController.d.cts +1 -1
  5. package/dist/cronjob/CronjobController.d.cts.map +1 -1
  6. package/dist/cronjob/CronjobController.d.mts +1 -1
  7. package/dist/cronjob/CronjobController.d.mts.map +1 -1
  8. package/dist/cronjob/CronjobController.mjs +6 -9
  9. package/dist/cronjob/CronjobController.mjs.map +1 -1
  10. package/dist/multichain/MultichainRouter.cjs +1 -1
  11. package/dist/multichain/MultichainRouter.cjs.map +1 -1
  12. package/dist/multichain/MultichainRouter.mjs +1 -1
  13. package/dist/multichain/MultichainRouter.mjs.map +1 -1
  14. package/dist/services/browser.cjs +0 -3
  15. package/dist/services/browser.cjs.map +1 -1
  16. package/dist/services/browser.d.cts +0 -1
  17. package/dist/services/browser.d.cts.map +1 -1
  18. package/dist/services/browser.d.mts +0 -1
  19. package/dist/services/browser.d.mts.map +1 -1
  20. package/dist/services/browser.mjs +0 -1
  21. package/dist/services/browser.mjs.map +1 -1
  22. package/dist/services/index.cjs +0 -3
  23. package/dist/services/index.cjs.map +1 -1
  24. package/dist/services/index.d.cts +0 -1
  25. package/dist/services/index.d.cts.map +1 -1
  26. package/dist/services/index.d.mts +0 -1
  27. package/dist/services/index.d.mts.map +1 -1
  28. package/dist/services/index.mjs +0 -1
  29. package/dist/services/index.mjs.map +1 -1
  30. package/dist/services/node-js/NodeProcessExecutionService.cjs +3 -3
  31. package/dist/services/node-js/NodeProcessExecutionService.cjs.map +1 -1
  32. package/dist/services/node-js/NodeProcessExecutionService.d.cts.map +1 -1
  33. package/dist/services/node-js/NodeProcessExecutionService.d.mts.map +1 -1
  34. package/dist/services/node-js/NodeProcessExecutionService.mjs +2 -2
  35. package/dist/services/node-js/NodeProcessExecutionService.mjs.map +1 -1
  36. package/dist/services/node-js/NodeThreadExecutionService.cjs +3 -3
  37. package/dist/services/node-js/NodeThreadExecutionService.cjs.map +1 -1
  38. package/dist/services/node-js/NodeThreadExecutionService.d.cts.map +1 -1
  39. package/dist/services/node-js/NodeThreadExecutionService.d.mts.map +1 -1
  40. package/dist/services/node-js/NodeThreadExecutionService.mjs +2 -2
  41. package/dist/services/node-js/NodeThreadExecutionService.mjs.map +1 -1
  42. package/dist/services/webview/WebViewMessageStream.cjs +4 -5
  43. package/dist/services/webview/WebViewMessageStream.cjs.map +1 -1
  44. package/dist/services/webview/WebViewMessageStream.d.cts.map +1 -1
  45. package/dist/services/webview/WebViewMessageStream.d.mts.map +1 -1
  46. package/dist/services/webview/WebViewMessageStream.mjs +1 -2
  47. package/dist/services/webview/WebViewMessageStream.mjs.map +1 -1
  48. package/dist/snaps/SnapController.cjs +36 -18
  49. package/dist/snaps/SnapController.cjs.map +1 -1
  50. package/dist/snaps/SnapController.d.cts +13 -15
  51. package/dist/snaps/SnapController.d.cts.map +1 -1
  52. package/dist/snaps/SnapController.d.mts +13 -15
  53. package/dist/snaps/SnapController.d.mts.map +1 -1
  54. package/dist/snaps/SnapController.mjs +37 -19
  55. package/dist/snaps/SnapController.mjs.map +1 -1
  56. package/dist/snaps/registry/json.cjs +3 -12
  57. package/dist/snaps/registry/json.cjs.map +1 -1
  58. package/dist/snaps/registry/json.d.cts.map +1 -1
  59. package/dist/snaps/registry/json.d.mts.map +1 -1
  60. package/dist/snaps/registry/json.mjs +3 -12
  61. package/dist/snaps/registry/json.mjs.map +1 -1
  62. package/dist/snaps/registry/registry.cjs.map +1 -1
  63. package/dist/snaps/registry/registry.d.cts +1 -1
  64. package/dist/snaps/registry/registry.d.cts.map +1 -1
  65. package/dist/snaps/registry/registry.d.mts +1 -1
  66. package/dist/snaps/registry/registry.d.mts.map +1 -1
  67. package/dist/snaps/registry/registry.mjs.map +1 -1
  68. package/dist/utils.cjs +63 -1
  69. package/dist/utils.cjs.map +1 -1
  70. package/dist/utils.d.cts +24 -0
  71. package/dist/utils.d.cts.map +1 -1
  72. package/dist/utils.d.mts +24 -0
  73. package/dist/utils.d.mts.map +1 -1
  74. package/dist/utils.mjs +61 -1
  75. package/dist/utils.mjs.map +1 -1
  76. package/package.json +10 -10
  77. package/dist/services/webworker/WebWorkerExecutionService.cjs +0 -112
  78. package/dist/services/webworker/WebWorkerExecutionService.cjs.map +0 -1
  79. package/dist/services/webworker/WebWorkerExecutionService.d.cts +0 -47
  80. package/dist/services/webworker/WebWorkerExecutionService.d.cts.map +0 -1
  81. package/dist/services/webworker/WebWorkerExecutionService.d.mts +0 -47
  82. package/dist/services/webworker/WebWorkerExecutionService.d.mts.map +0 -1
  83. package/dist/services/webworker/WebWorkerExecutionService.mjs +0 -108
  84. package/dist/services/webworker/WebWorkerExecutionService.mjs.map +0 -1
  85. package/dist/services/webworker/index.cjs +0 -18
  86. package/dist/services/webworker/index.cjs.map +0 -1
  87. package/dist/services/webworker/index.d.cts +0 -2
  88. package/dist/services/webworker/index.d.cts.map +0 -1
  89. package/dist/services/webworker/index.d.mts +0 -2
  90. package/dist/services/webworker/index.d.mts.map +0 -1
  91. package/dist/services/webworker/index.mjs +0 -2
  92. package/dist/services/webworker/index.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_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_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_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_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");
@@ -72,7 +72,7 @@ function truncateSnap(snap) {
72
72
  * - Start: Initializes the snap in its SES realm with the authorized permissions.
73
73
  */
74
74
  class SnapController extends base_controller_1.BaseController {
75
- 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, }) {
75
+ 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, }) {
76
76
  super({
77
77
  messenger,
78
78
  metadata: {
@@ -130,6 +130,8 @@ class SnapController extends base_controller_1.BaseController {
130
130
  _SnapController_timeoutForLastRequestStatus.set(this, void 0);
131
131
  _SnapController_statusMachine.set(this, void 0);
132
132
  _SnapController_preinstalledSnaps.set(this, void 0);
133
+ _SnapController_trackEvent.set(this, void 0);
134
+ _SnapController_trackSnapExport.set(this, void 0);
133
135
  /**
134
136
  * Persist the state of a Snap.
135
137
  *
@@ -179,6 +181,7 @@ class SnapController extends base_controller_1.BaseController {
179
181
  this._onOutboundResponse = this._onOutboundResponse.bind(this);
180
182
  __classPrivateFieldSet(this, _SnapController_rollbackSnapshots, new Map(), "f");
181
183
  __classPrivateFieldSet(this, _SnapController_snapsRuntimeData, new Map(), "f");
184
+ __classPrivateFieldSet(this, _SnapController_trackEvent, trackEvent, "f");
182
185
  __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_pollForLastRequestStatus).call(this);
183
186
  /* eslint-disable @typescript-eslint/unbound-method */
184
187
  this.messagingSystem.subscribe('ExecutionService:unhandledError', this._onUnhandledSnapError);
@@ -202,6 +205,22 @@ class SnapController extends base_controller_1.BaseController {
202
205
  __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_handlePreinstalledSnaps).call(this, __classPrivateFieldGet(this, _SnapController_preinstalledSnaps, "f"));
203
206
  }
204
207
  Object.values(this.state?.snaps ?? {}).forEach((snap) => __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_setupRuntime).call(this, snap.id));
208
+ __classPrivateFieldSet(this, _SnapController_trackSnapExport, (0, utils_2.throttleTracking)((snapId, handler, success, origin) => {
209
+ const snapMetadata = this.messagingSystem.call('SnapsRegistry:getMetadata', snapId);
210
+ __classPrivateFieldGet(this, _SnapController_trackEvent, "f").call(this, {
211
+ event: 'Snap Export Used',
212
+ category: 'Snaps',
213
+ properties: {
214
+ // eslint-disable-next-line @typescript-eslint/naming-convention
215
+ snap_id: snapId,
216
+ export: handler,
217
+ // eslint-disable-next-line @typescript-eslint/naming-convention
218
+ snap_category: snapMetadata?.category,
219
+ success,
220
+ origin,
221
+ },
222
+ });
223
+ }), "f");
205
224
  }
206
225
  /**
207
226
  * Checks all installed snaps against the block list and
@@ -523,8 +542,10 @@ class SnapController extends base_controller_1.BaseController {
523
542
  this.update((state) => {
524
543
  state.snaps = {};
525
544
  state.snapStates = {};
545
+ state.unencryptedSnapStates = {};
526
546
  });
527
547
  __classPrivateFieldGet(this, _SnapController_snapsRuntimeData, "f").clear();
548
+ __classPrivateFieldGet(this, _SnapController_rollbackSnapshots, "f").clear();
528
549
  // We want to remove all snaps & permissions, except for preinstalled snaps
529
550
  if (__classPrivateFieldGet(this, _SnapController_preinstalledSnaps, "f")) {
530
551
  __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_handlePreinstalledSnaps).call(this, __classPrivateFieldGet(this, _SnapController_preinstalledSnaps, "f"));
@@ -946,17 +967,6 @@ class SnapController extends base_controller_1.BaseController {
946
967
  throw error;
947
968
  }
948
969
  }
949
- /**
950
- * Get metadata for the given snap ID.
951
- *
952
- * @param snapId - The ID of the snap to get metadata for.
953
- * @returns The metadata for the given snap ID, or `null` if the snap is not
954
- * verified.
955
- */
956
- async getRegistryMetadata(snapId) {
957
- __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_assertCanUsePlatform).call(this);
958
- return await this.messagingSystem.call('SnapsRegistry:getMetadata', snapId);
959
- }
960
970
  /**
961
971
  * Initiates a request for the given snap's initial permissions.
962
972
  * Must be called in order. See processRequestedSnap.
@@ -1060,7 +1070,7 @@ class SnapController extends base_controller_1.BaseController {
1060
1070
  }
1061
1071
  }
1062
1072
  exports.SnapController = SnapController;
1063
- _SnapController_closeAllConnections = new WeakMap(), _SnapController_dynamicPermissions = new WeakMap(), _SnapController_environmentEndowmentPermissions = new WeakMap(), _SnapController_excludedPermissions = new WeakMap(), _SnapController_featureFlags = new WeakMap(), _SnapController_fetchFunction = new WeakMap(), _SnapController_idleTimeCheckInterval = new WeakMap(), _SnapController_maxIdleTime = new WeakMap(), _SnapController_encryptor = new WeakMap(), _SnapController_getMnemonicSeed = new WeakMap(), _SnapController_getFeatureFlags = new WeakMap(), _SnapController_clientCryptography = new WeakMap(), _SnapController_detectSnapLocation = new WeakMap(), _SnapController_snapsRuntimeData = new WeakMap(), _SnapController_rollbackSnapshots = new WeakMap(), _SnapController_timeoutForLastRequestStatus = new WeakMap(), _SnapController_statusMachine = new WeakMap(), _SnapController_preinstalledSnaps = new WeakMap(), _SnapController_persistSnapState = new WeakMap(), _SnapController_instances = new WeakSet(), _SnapController_initializeStateMachine = function _SnapController_initializeStateMachine() {
1073
+ _SnapController_closeAllConnections = new WeakMap(), _SnapController_dynamicPermissions = new WeakMap(), _SnapController_environmentEndowmentPermissions = new WeakMap(), _SnapController_excludedPermissions = new WeakMap(), _SnapController_featureFlags = new WeakMap(), _SnapController_fetchFunction = new WeakMap(), _SnapController_idleTimeCheckInterval = new WeakMap(), _SnapController_maxIdleTime = new WeakMap(), _SnapController_encryptor = new WeakMap(), _SnapController_getMnemonicSeed = new WeakMap(), _SnapController_getFeatureFlags = new WeakMap(), _SnapController_clientCryptography = new WeakMap(), _SnapController_detectSnapLocation = new WeakMap(), _SnapController_snapsRuntimeData = new WeakMap(), _SnapController_rollbackSnapshots = new WeakMap(), _SnapController_timeoutForLastRequestStatus = new WeakMap(), _SnapController_statusMachine = new WeakMap(), _SnapController_preinstalledSnaps = new WeakMap(), _SnapController_trackEvent = new WeakMap(), _SnapController_trackSnapExport = new WeakMap(), _SnapController_persistSnapState = new WeakMap(), _SnapController_instances = new WeakSet(), _SnapController_initializeStateMachine = function _SnapController_initializeStateMachine() {
1064
1074
  const disableGuard = ({ snapId }) => {
1065
1075
  return this.getExpect(snapId).enabled;
1066
1076
  };
@@ -1129,7 +1139,6 @@ _SnapController_closeAllConnections = new WeakMap(), _SnapController_dynamicPerm
1129
1139
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:getRunnableSnaps`, (...args) => this.getRunnableSnaps(...args));
1130
1140
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:incrementActiveReferences`, (...args) => this.incrementActiveReferences(...args));
1131
1141
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:decrementActiveReferences`, (...args) => this.decrementActiveReferences(...args));
1132
- this.messagingSystem.registerActionHandler(`${exports.controllerName}:getRegistryMetadata`, async (...args) => this.getRegistryMetadata(...args));
1133
1142
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:disconnectOrigin`, (...args) => this.removeSnapFromSubject(...args));
1134
1143
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:revokeDynamicPermissions`, (...args) => this.revokeDynamicSnapPermissions(...args));
1135
1144
  this.messagingSystem.registerActionHandler(`${exports.controllerName}:getFile`, async (...args) => this.getSnapFile(...args));
@@ -1734,12 +1743,12 @@ async function _SnapController_getEndowments(snapId) {
1734
1743
  }
1735
1744
  await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_assertSnapRpcResponse).call(this, snapId, handlerType, result);
1736
1745
  const transformedResult = await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformSnapRpcResponse).call(this, snapId, handlerType, transformedRequest, result);
1737
- __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id);
1746
+ __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id, handlerType, origin, true);
1738
1747
  return transformedResult;
1739
1748
  }
1740
1749
  catch (error) {
1741
1750
  // We flag the RPC request as finished early since termination may affect pending requests
1742
- __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id);
1751
+ __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, transformedRequest.id, handlerType, origin, false);
1743
1752
  const [jsonRpcError, handled] = (0, snaps_utils_1.unwrapError)(error);
1744
1753
  if (!handled) {
1745
1754
  await this.stopSnap(snapId, snaps_utils_1.SnapStatusEvents.Crash);
@@ -1902,12 +1911,21 @@ async function _SnapController_assertSnapRpcResponse(snapId, handlerType, result
1902
1911
  const runtime = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getRuntimeExpect).call(this, snapId);
1903
1912
  runtime.pendingInboundRequests.push({ requestId, timer });
1904
1913
  runtime.lastRequest = null;
1905
- }, _SnapController_recordSnapRpcRequestFinish = function _SnapController_recordSnapRpcRequestFinish(snapId, requestId) {
1914
+ }, _SnapController_recordSnapRpcRequestFinish = function _SnapController_recordSnapRpcRequestFinish(snapId, requestId, handlerType, origin, success) {
1906
1915
  const runtime = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getRuntimeExpect).call(this, snapId);
1907
1916
  runtime.pendingInboundRequests = runtime.pendingInboundRequests.filter((request) => request.requestId !== requestId);
1908
1917
  if (runtime.pendingInboundRequests.length === 0) {
1909
1918
  runtime.lastRequest = Date.now();
1910
1919
  }
1920
+ const snap = this.get(snapId);
1921
+ if ((0, utils_2.isTrackableHandler)(handlerType) && !snap?.preinstalled) {
1922
+ try {
1923
+ __classPrivateFieldGet(this, _SnapController_trackSnapExport, "f").call(this, snapId, handlerType, success, origin);
1924
+ }
1925
+ catch (error) {
1926
+ (0, snaps_utils_1.logError)(`Error when calling MetaMetrics hook for snap "${snap?.id}": ${(0, snaps_sdk_1.getErrorMessage)(error)}`);
1927
+ }
1928
+ }
1911
1929
  }, _SnapController_getRollbackSnapshot = function _SnapController_getRollbackSnapshot(snapId) {
1912
1930
  return __classPrivateFieldGet(this, _SnapController_rollbackSnapshots, "f").get(snapId);
1913
1931
  }, _SnapController_createRollbackSnapshot = function _SnapController_createRollbackSnapshot(snapId) {