@metamask/snaps-controllers 12.0.1 → 12.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.
- package/CHANGELOG.md +9 -1
- package/dist/snaps/SnapController.cjs +43 -6
- package/dist/snaps/SnapController.cjs.map +1 -1
- package/dist/snaps/SnapController.d.cts +15 -2
- package/dist/snaps/SnapController.d.cts.map +1 -1
- package/dist/snaps/SnapController.d.mts +15 -2
- package/dist/snaps/SnapController.d.mts.map +1 -1
- package/dist/snaps/SnapController.mjs +45 -8
- package/dist/snaps/SnapController.mjs.map +1 -1
- package/dist/snaps/constants.cjs +18 -1
- package/dist/snaps/constants.cjs.map +1 -1
- package/dist/snaps/constants.d.cts +3 -0
- package/dist/snaps/constants.d.cts.map +1 -1
- package/dist/snaps/constants.d.mts +3 -0
- package/dist/snaps/constants.d.mts.map +1 -1
- package/dist/snaps/constants.mjs +17 -0
- package/dist/snaps/constants.mjs.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [12.1.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add support for `wallet_switchEthereumChain` ([#2634](https://github.com/MetaMask/snaps/pull/2634))
|
|
15
|
+
- Add support for SIP-31 `onClientRequest` handler ([#3394](https://github.com/MetaMask/snaps/pull/3394))
|
|
16
|
+
|
|
10
17
|
## [12.0.1]
|
|
11
18
|
|
|
12
19
|
### Fixed
|
|
@@ -749,7 +756,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
749
756
|
- The version of the package no longer needs to match the version of all other
|
|
750
757
|
MetaMask Snaps packages.
|
|
751
758
|
|
|
752
|
-
[Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@12.0
|
|
759
|
+
[Unreleased]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@12.1.0...HEAD
|
|
760
|
+
[12.1.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@12.0.1...@metamask/snaps-controllers@12.1.0
|
|
753
761
|
[12.0.1]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@12.0.0...@metamask/snaps-controllers@12.0.1
|
|
754
762
|
[12.0.0]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@11.2.3...@metamask/snaps-controllers@12.0.0
|
|
755
763
|
[11.2.3]: https://github.com/MetaMask/snaps/compare/@metamask/snaps-controllers@11.2.2...@metamask/snaps-controllers@11.2.3
|
|
@@ -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_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_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");
|
|
@@ -1031,7 +1031,7 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
1031
1031
|
*/
|
|
1032
1032
|
async handleRequest({ snapId, origin, handler: handlerType, request: rawRequest, }) {
|
|
1033
1033
|
__classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_assertCanUsePlatform).call(this);
|
|
1034
|
-
(0, utils_1.assert)(origin ===
|
|
1034
|
+
(0, utils_1.assert)(origin === constants_1.METAMASK_ORIGIN || (0, snaps_utils_1.isValidUrl)(origin), "'origin' must be a valid URL or 'metamask'.");
|
|
1035
1035
|
const request = {
|
|
1036
1036
|
jsonrpc: '2.0',
|
|
1037
1037
|
id: (0, nanoid_1.nanoid)(),
|
|
@@ -1061,6 +1061,10 @@ class SnapController extends base_controller_1.BaseController {
|
|
|
1061
1061
|
throw new Error(`Snap "${snapId}" is not permitted to handle requests from "${origin}".`);
|
|
1062
1062
|
}
|
|
1063
1063
|
}
|
|
1064
|
+
if (origin !== constants_1.METAMASK_ORIGIN &&
|
|
1065
|
+
constants_1.CLIENT_ONLY_HANDLERS.includes(handlerType)) {
|
|
1066
|
+
throw new Error(`"${handlerType}" can only be invoked by MetaMask.`);
|
|
1067
|
+
}
|
|
1064
1068
|
const handler = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getRpcRequestHandler).call(this, snapId);
|
|
1065
1069
|
if (!handler) {
|
|
1066
1070
|
throw new Error(`Snap RPC message handler not found for snap "${snapId}".`);
|
|
@@ -1180,7 +1184,7 @@ _SnapController_closeAllConnections = new WeakMap(), _SnapController_dynamicPerm
|
|
|
1180
1184
|
// Add snap to the SnapController state
|
|
1181
1185
|
__classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_set).call(this, {
|
|
1182
1186
|
id: snapId,
|
|
1183
|
-
origin:
|
|
1187
|
+
origin: constants_1.METAMASK_ORIGIN,
|
|
1184
1188
|
files: filesObject,
|
|
1185
1189
|
removable,
|
|
1186
1190
|
hidden,
|
|
@@ -1201,10 +1205,10 @@ _SnapController_closeAllConnections = new WeakMap(), _SnapController_dynamicPerm
|
|
|
1201
1205
|
});
|
|
1202
1206
|
// Emit events
|
|
1203
1207
|
if (isUpdate) {
|
|
1204
|
-
this.messagingSystem.publish('SnapController:snapUpdated', this.getTruncatedExpect(snapId), existingSnap.version,
|
|
1208
|
+
this.messagingSystem.publish('SnapController:snapUpdated', this.getTruncatedExpect(snapId), existingSnap.version, constants_1.METAMASK_ORIGIN, true);
|
|
1205
1209
|
}
|
|
1206
1210
|
else {
|
|
1207
|
-
this.messagingSystem.publish('SnapController:snapInstalled', this.getTruncatedExpect(snapId),
|
|
1211
|
+
this.messagingSystem.publish('SnapController:snapInstalled', this.getTruncatedExpect(snapId), constants_1.METAMASK_ORIGIN, true);
|
|
1208
1212
|
}
|
|
1209
1213
|
}
|
|
1210
1214
|
}, _SnapController_pollForLastRequestStatus = function _SnapController_pollForLastRequestStatus() {
|
|
@@ -2052,6 +2056,38 @@ async function _SnapController_rollbackSnaps(snapIds) {
|
|
|
2052
2056
|
// oldConnections ∖ (oldConnections ∖ desiredConnectionsSet) ⟺ oldConnections ∩ desiredConnectionsSet
|
|
2053
2057
|
const approvedConnections = (0, utils_2.setDiff)(filteredOldConnections, unusedConnections);
|
|
2054
2058
|
return { newConnections, unusedConnections, approvedConnections };
|
|
2059
|
+
}, _SnapController_getPermissionsToGrant = function _SnapController_getPermissionsToGrant(snapId, newPermissions) {
|
|
2060
|
+
if (__classPrivateFieldGet(this, _SnapController_featureFlags, "f").useCaip25Permission &&
|
|
2061
|
+
Object.keys(newPermissions).includes(snaps_rpc_methods_1.SnapEndowments.EthereumProvider)) {
|
|
2062
|
+
// This will return the globally selected network if the Snap doesn't have
|
|
2063
|
+
// one set.
|
|
2064
|
+
const networkClientId = this.messagingSystem.call('SelectedNetworkController:getNetworkClientIdForDomain', snapId);
|
|
2065
|
+
const { configuration } = this.messagingSystem.call('NetworkController:getNetworkClientById', networkClientId);
|
|
2066
|
+
const chainId = (0, utils_1.hexToNumber)(configuration.chainId);
|
|
2067
|
+
// This needs to be assigned to have proper type inference.
|
|
2068
|
+
const modifiedPermissions = {
|
|
2069
|
+
...newPermissions,
|
|
2070
|
+
'endowment:caip25': {
|
|
2071
|
+
caveats: [
|
|
2072
|
+
{
|
|
2073
|
+
type: 'authorizedScopes',
|
|
2074
|
+
value: {
|
|
2075
|
+
requiredScopes: {},
|
|
2076
|
+
optionalScopes: {
|
|
2077
|
+
[`eip155:${chainId}`]: {
|
|
2078
|
+
accounts: [],
|
|
2079
|
+
},
|
|
2080
|
+
},
|
|
2081
|
+
sessionProperties: {},
|
|
2082
|
+
isMultichainOrigin: false,
|
|
2083
|
+
},
|
|
2084
|
+
},
|
|
2085
|
+
],
|
|
2086
|
+
},
|
|
2087
|
+
};
|
|
2088
|
+
return modifiedPermissions;
|
|
2089
|
+
}
|
|
2090
|
+
return newPermissions;
|
|
2055
2091
|
}, _SnapController_updatePermissions = function _SnapController_updatePermissions({ snapId, unusedPermissions = {}, newPermissions = {}, requestData, }) {
|
|
2056
2092
|
const unusedPermissionsKeys = Object.keys(unusedPermissions);
|
|
2057
2093
|
if ((0, utils_1.isNonEmptyArray)(unusedPermissionsKeys)) {
|
|
@@ -2060,8 +2096,9 @@ async function _SnapController_rollbackSnaps(snapIds) {
|
|
|
2060
2096
|
});
|
|
2061
2097
|
}
|
|
2062
2098
|
if ((0, utils_1.isNonEmptyArray)(Object.keys(newPermissions))) {
|
|
2099
|
+
const approvedPermissions = __classPrivateFieldGet(this, _SnapController_instances, "m", _SnapController_getPermissionsToGrant).call(this, snapId, newPermissions);
|
|
2063
2100
|
this.messagingSystem.call('PermissionController:grantPermissions', {
|
|
2064
|
-
approvedPermissions
|
|
2101
|
+
approvedPermissions,
|
|
2065
2102
|
subject: { origin: snapId },
|
|
2066
2103
|
requestData,
|
|
2067
2104
|
});
|