@metamask/snaps-controllers 9.17.0 → 9.18.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [9.18.0]
11
+
12
+ ### Added
13
+
14
+ - Add support for `onAssetsLookup` and `onAssetsConversion` handlers ([#3028](https://github.com/MetaMask/snaps/pull/3028))
15
+
10
16
  ## [9.17.0]
11
17
 
12
18
  ### Added
@@ -605,7 +611,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
605
611
  - The version of the package no longer needs to match the version of all other
606
612
  MetaMask Snaps packages.
607
613
 
608
- [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@9.17.0...HEAD
614
+ [Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@9.18.0...HEAD
615
+ [9.18.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@9.17.0...@metamask/snaps-controllers@9.18.0
609
616
  [9.17.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@9.16.0...@metamask/snaps-controllers@9.17.0
610
617
  [9.16.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@9.15.0...@metamask/snaps-controllers@9.16.0
611
618
  [9.15.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@9.14.0...@metamask/snaps-controllers@9.15.0
@@ -13,7 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
15
  };
16
- var _SnapController_instances, _SnapController_closeAllConnections, _SnapController_dynamicPermissions, _SnapController_environmentEndowmentPermissions, _SnapController_excludedPermissions, _SnapController_featureFlags, _SnapController_fetchFunction, _SnapController_idleTimeCheckInterval, _SnapController_maxIdleTime, _SnapController_encryptor, _SnapController_getMnemonic, _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_getSnapEncryptionKey, _SnapController_hasCachedEncryptionKey, _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_transformSnapRpcRequestResult, _SnapController_assertSnapRpcRequestResult, _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;
16
+ var _SnapController_instances, _SnapController_closeAllConnections, _SnapController_dynamicPermissions, _SnapController_environmentEndowmentPermissions, _SnapController_excludedPermissions, _SnapController_featureFlags, _SnapController_fetchFunction, _SnapController_idleTimeCheckInterval, _SnapController_maxIdleTime, _SnapController_encryptor, _SnapController_getMnemonic, _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_getSnapEncryptionKey, _SnapController_hasCachedEncryptionKey, _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_transformSnapRpcRequestResult, _SnapController_transformOnAssetsLookupResult, _SnapController_transformOnAssetsConversionResult, _SnapController_assertSnapRpcRequestResult, _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;
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.SnapController = exports.SNAP_APPROVAL_RESULT = exports.SNAP_APPROVAL_UPDATE = exports.SNAP_APPROVAL_INSTALL = exports.controllerName = void 0;
19
19
  const base_controller_1 = require("@metamask/base-controller");
@@ -1723,7 +1723,7 @@ async function _SnapController_getEndowments(snapId) {
1723
1723
  throw new Error(`${snapId} failed to respond to the request in time.`);
1724
1724
  }
1725
1725
  await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_assertSnapRpcRequestResult).call(this, snapId, handlerType, result);
1726
- const transformedResult = await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformSnapRpcRequestResult).call(this, snapId, handlerType, result);
1726
+ const transformedResult = await __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformSnapRpcRequestResult).call(this, snapId, handlerType, request, result);
1727
1727
  __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_recordSnapRpcRequestFinish).call(this, snapId, request.id);
1728
1728
  return transformedResult;
1729
1729
  }
@@ -1759,10 +1759,11 @@ async function _SnapController_createInterface(snapId, content, contentType) {
1759
1759
  *
1760
1760
  * @param snapId - The snap ID of the snap that produced the result.
1761
1761
  * @param handlerType - The handler type that produced the result.
1762
+ * @param request - The request that returned the result.
1762
1763
  * @param result - The result.
1763
1764
  * @returns The transformed result if applicable, otherwise the original result.
1764
1765
  */
1765
- async function _SnapController_transformSnapRpcRequestResult(snapId, handlerType, result) {
1766
+ async function _SnapController_transformSnapRpcRequestResult(snapId, handlerType, request, result) {
1766
1767
  switch (handlerType) {
1767
1768
  case snaps_utils_1.HandlerType.OnTransaction:
1768
1769
  case snaps_utils_1.HandlerType.OnSignature:
@@ -1778,9 +1779,47 @@ async function _SnapController_transformSnapRpcRequestResult(snapId, handlerType
1778
1779
  }
1779
1780
  return result;
1780
1781
  }
1782
+ case snaps_utils_1.HandlerType.OnAssetsLookup:
1783
+ // We can cast since the request and result have already been validated.
1784
+ return __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformOnAssetsLookupResult).call(this, snapId, request, result);
1785
+ case snaps_utils_1.HandlerType.OnAssetsConversion:
1786
+ // We can cast since the request and result have already been validated.
1787
+ return __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_transformOnAssetsConversionResult).call(this, request, result);
1781
1788
  default:
1782
1789
  return result;
1783
1790
  }
1791
+ }, _SnapController_transformOnAssetsLookupResult = function _SnapController_transformOnAssetsLookupResult(snapId, { params: requestedParams }, { assets }) {
1792
+ const permissions = this.messagingSystem.call('PermissionController:getPermissions', snapId);
1793
+ // We know the permissions are guaranteed to be set here.
1794
+ (0, utils_1.assert)(permissions);
1795
+ const permission = permissions[snaps_rpc_methods_1.SnapEndowments.Assets];
1796
+ const scopes = (0, snaps_rpc_methods_1.getChainIdsCaveat)(permission);
1797
+ (0, utils_1.assert)(scopes);
1798
+ const { assets: requestedAssets } = requestedParams;
1799
+ const filteredAssets = Object.keys(assets).reduce((accumulator, assetType) => {
1800
+ const castAssetType = assetType;
1801
+ const isValid = scopes.some((scope) => castAssetType.startsWith(scope)) &&
1802
+ requestedAssets.includes(castAssetType);
1803
+ // Filter out unrequested assets and assets for scopes the Snap hasn't registered for.
1804
+ if (isValid) {
1805
+ accumulator[castAssetType] = assets[castAssetType];
1806
+ }
1807
+ return accumulator;
1808
+ }, {});
1809
+ return { assets: filteredAssets };
1810
+ }, _SnapController_transformOnAssetsConversionResult = function _SnapController_transformOnAssetsConversionResult({ params: requestedParams }, { conversionRates }) {
1811
+ const { conversions: requestedConversions } = requestedParams;
1812
+ const filteredConversionRates = requestedConversions.reduce((accumulator, conversion) => {
1813
+ var _a;
1814
+ const rate = conversionRates[conversion.from]?.[conversion.to];
1815
+ // Only include rates that were actually requested.
1816
+ if (rate) {
1817
+ accumulator[_a = conversion.from] ?? (accumulator[_a] = {});
1818
+ accumulator[conversion.from][conversion.to] = rate;
1819
+ }
1820
+ return accumulator;
1821
+ }, {});
1822
+ return { conversionRates: filteredConversionRates };
1784
1823
  }, _SnapController_assertSnapRpcRequestResult =
1785
1824
  /**
1786
1825
  * Assert that the returned result of a Snap RPC call is the expected shape.
@@ -1822,6 +1861,12 @@ async function _SnapController_assertSnapRpcRequestResult(snapId, handlerType, r
1822
1861
  case snaps_utils_1.HandlerType.OnNameLookup:
1823
1862
  (0, utils_1.assertStruct)(result, snaps_utils_1.OnNameLookupResponseStruct);
1824
1863
  break;
1864
+ case snaps_utils_1.HandlerType.OnAssetsLookup:
1865
+ (0, utils_1.assertStruct)(result, snaps_sdk_1.OnAssetsLookupResponseStruct);
1866
+ break;
1867
+ case snaps_utils_1.HandlerType.OnAssetsConversion:
1868
+ (0, utils_1.assertStruct)(result, snaps_sdk_1.OnAssetsConversionResponseStruct);
1869
+ break;
1825
1870
  default:
1826
1871
  break;
1827
1872
  }