Skip to content

Commit b68353f

Browse files
authored
[BREAKING] Move endowments from Controllers to RPC methods (#2155)
This PR is a **BREAKING** change because certain elements are moved from one package to another and import across the libraries is affected. ### Summary of changes All endowment related functionalities and specifications are moved from the `endowments` folder within `snaps-controllers` to the `endowments` folder located under `snaps-rpc-methods` package and exported from there. Export of certain functions from endowments required adjustments to the index files, so these changes are made as well. Fixed are related imports of the endowments in another packages affected (e.g. snaps-simulator). Code coverage thresholds are adjusted to the new calculations since there are no functional or logical changes. ### Reasons for the changes New features being implemented require endowment related specifications and functionalities, in different packages. The example of this is Dynamic Permissions feature which require processing of the raw permission specification in order to request permission grant to the Permission Controller. This process requires specific utility functions as well as the caveat mappers or related specifications which cannot be imported from `snaps-controllers` package directly into the `snaps-rpc-methods` package. The best solution for now is to move the endowment related code to the `snaps-rpc-methods` package and export it from there.
1 parent 5ea4fb7 commit b68353f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+55
-46
lines changed
+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"branches": 91.4,
3-
"functions": 96.93,
4-
"lines": 98.01,
5-
"statements": 97.73
2+
"branches": 91.12,
3+
"functions": 96.81,
4+
"lines": 97.86,
5+
"statements": 97.51
66
}

packages/snaps-controllers/src/cronjob/CronjobController.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1+
import { SnapEndowments } from '@metamask/snaps-rpc-methods';
12
import type { TruncatedSnap } from '@metamask/snaps-utils';
23
import { HandlerType } from '@metamask/snaps-utils';
34
import { MOCK_ORIGIN, MOCK_SNAP_ID } from '@metamask/snaps-utils/test-utils';
45
import type { SemVerVersion } from '@metamask/utils';
56
import { Duration, inMilliseconds } from '@metamask/utils';
67

7-
import { SnapEndowments } from '../snaps';
88
import {
99
getRestrictedCronjobControllerMessenger,
1010
getRootCronjobControllerMessenger,

packages/snaps-controllers/src/cronjob/CronjobController.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import type { RestrictedControllerMessenger } from '@metamask/base-controller';
22
import { BaseController } from '@metamask/base-controller';
33
import type { GetPermissions } from '@metamask/permission-controller';
4+
import {
5+
getCronjobCaveatJobs,
6+
SnapEndowments,
7+
} from '@metamask/snaps-rpc-methods';
48
import type { SnapId } from '@metamask/snaps-sdk';
59
import type {
610
TruncatedSnap,
@@ -22,8 +26,7 @@ import type {
2226
SnapUninstalled,
2327
SnapUpdated,
2428
} from '..';
25-
import { getRunnableSnaps, SnapEndowments } from '..';
26-
import { getCronjobCaveatJobs } from '../snaps/endowments/cronjob';
29+
import { getRunnableSnaps } from '..';
2730
import { Timer } from '../snaps/Timer';
2831

2932
export type CronjobControllerActions =

packages/snaps-controllers/src/snaps/SnapController.test.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@ import {
1010
type ValidPermission,
1111
} from '@metamask/permission-controller';
1212
import { providerErrors, rpcErrors } from '@metamask/rpc-errors';
13-
import { WALLET_SNAP_PERMISSION_KEY } from '@metamask/snaps-rpc-methods';
13+
import {
14+
WALLET_SNAP_PERMISSION_KEY,
15+
handlerEndowments,
16+
SnapEndowments,
17+
} from '@metamask/snaps-rpc-methods';
1418
import type { SnapId } from '@metamask/snaps-sdk';
1519
import { AuxiliaryFileEncoding, text } from '@metamask/snaps-sdk';
1620
import type { SnapPermissions, RpcOrigins } from '@metamask/snaps-utils';
@@ -87,7 +91,6 @@ import {
8791
sleep,
8892
} from '../test-utils';
8993
import { delay } from '../utils';
90-
import { handlerEndowments, SnapEndowments } from './endowments';
9194
import { SnapsRegistryStatus } from './registry';
9295
import type { SnapControllerState } from './SnapController';
9396
import {

packages/snaps-controllers/src/snaps/SnapController.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,15 @@ import type {
2727
import { SubjectType } from '@metamask/permission-controller';
2828
import { rpcErrors } from '@metamask/rpc-errors';
2929
import type { BlockReason } from '@metamask/snaps-registry';
30-
import { WALLET_SNAP_PERMISSION_KEY } from '@metamask/snaps-rpc-methods';
30+
import {
31+
WALLET_SNAP_PERMISSION_KEY,
32+
getMaxRequestTimeCaveat,
33+
handlerEndowments,
34+
SnapEndowments,
35+
getKeyringCaveatOrigins,
36+
getRpcCaveatOrigins,
37+
processSnapPermissions,
38+
} from '@metamask/snaps-rpc-methods';
3139
import type {
3240
RequestSnapsParams,
3341
RequestSnapsResult,
@@ -105,16 +113,8 @@ import type {
105113
} from '../services';
106114
import { fetchSnap, hasTimedOut, setDiff, withTimeout } from '../utils';
107115
import { ALLOWED_PERMISSIONS } from './constants';
108-
import {
109-
getMaxRequestTimeCaveat,
110-
handlerEndowments,
111-
SnapEndowments,
112-
} from './endowments';
113-
import { getKeyringCaveatOrigins } from './endowments/keyring';
114-
import { getRpcCaveatOrigins } from './endowments/rpc';
115116
import type { SnapLocation } from './location';
116117
import { detectSnapLocation } from './location';
117-
import { processSnapPermissions } from './permissions';
118118
import type {
119119
GetMetadata,
120120
GetResult,

packages/snaps-controllers/src/snaps/constants.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { SnapEndowments } from './endowments';
1+
import { SnapEndowments } from '@metamask/snaps-rpc-methods';
22

33
// These permissions are allowed without being on the allowlist.
44
export const ALLOWED_PERMISSIONS = Object.freeze([
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
export * from './location';
22
export * from './SnapController';
3-
export * from './endowments';
43
export * from './selectors';
54
export * from './registry';
6-
export * from './permissions';

packages/snaps-controllers/src/test-utils/controller.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import type {
88
} from '@metamask/permission-controller';
99
import { SubjectType } from '@metamask/permission-controller';
1010
import { providerErrors } from '@metamask/rpc-errors';
11-
import { WALLET_SNAP_PERMISSION_KEY } from '@metamask/snaps-rpc-methods';
11+
import {
12+
SnapEndowments,
13+
WALLET_SNAP_PERMISSION_KEY,
14+
} from '@metamask/snaps-rpc-methods';
1215
import { text, type SnapId } from '@metamask/snaps-sdk';
1316
import { SnapCaveatType } from '@metamask/snaps-utils';
1417
import {
@@ -39,7 +42,7 @@ import type {
3942
SnapsRegistryActions,
4043
SnapsRegistryEvents,
4144
} from '../snaps';
42-
import { SnapController, SnapEndowments } from '../snaps';
45+
import { SnapController } from '../snaps';
4346
import { MOCK_CRONJOB_PERMISSION } from './cronjob';
4447
import { getNodeEES, getNodeEESMessenger } from './execution-environment';
4548
import { MockSnapsRegistry } from './registry';

packages/snaps-controllers/src/test-utils/cronjob.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import type { PermissionConstraint } from '@metamask/permission-controller';
2+
import { SnapEndowments } from '@metamask/snaps-rpc-methods';
23
import { SnapCaveatType } from '@metamask/snaps-utils';
34
import { MOCK_ORIGIN } from '@metamask/snaps-utils/test-utils';
45

5-
import { SnapEndowments } from '../snaps/endowments';
6-
76
export const MOCK_CRONJOB_PERMISSION: PermissionConstraint = {
87
caveats: [
98
{

packages/snaps-jest/src/internals/simulation/controllers.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ import {
99
SubjectType,
1010
} from '@metamask/permission-controller';
1111
import {
12+
caveatSpecifications as snapsCaveatsSpecifications,
1213
endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications,
1314
processSnapPermissions,
14-
} from '@metamask/snaps-controllers';
15-
import { caveatSpecifications as snapsCaveatsSpecifications } from '@metamask/snaps-rpc-methods';
15+
} from '@metamask/snaps-rpc-methods';
1616
import type { SnapManifest } from '@metamask/snaps-utils';
1717
import { getSafeJson } from '@metamask/utils';
1818

packages/snaps-jest/src/internals/simulation/methods/specifications.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import type { GenericPermissionController } from '@metamask/permission-controller';
22
import {
3+
endowmentPermissionBuilders,
34
buildSnapEndowmentSpecifications,
45
buildSnapRestrictedMethodSpecifications,
5-
endowmentPermissionBuilders,
6-
} from '@metamask/snaps-controllers';
6+
} from '@metamask/snaps-rpc-methods';
77
import { DEFAULT_ENDOWMENTS } from '@metamask/snaps-utils';
88

99
import type { SimulationOptions } from '../options';

packages/snaps-rpc-methods/jest.config.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ module.exports = deepmerge(baseConfig, {
1010
],
1111
coverageThreshold: {
1212
global: {
13-
branches: 93.07,
14-
functions: 100,
15-
lines: 99.2,
16-
statements: 97.77,
13+
branches: 91.54,
14+
functions: 97,
15+
lines: 97.53,
16+
statements: 97,
1717
},
1818
},
1919
});

packages/snaps-controllers/src/snaps/endowments/index.ts renamed to packages/snaps-rpc-methods/src/endowments/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,4 @@ export { getTransactionOriginCaveat } from './transaction-insight';
116116
export { getChainIdsCaveat, getLookupMatchersCaveat } from './name-lookup';
117117
export { getKeyringCaveatOrigins } from './keyring';
118118
export { getMaxRequestTimeCaveat } from './caveats';
119+
export { getCronjobCaveatJobs } from './cronjob';
+4-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
export type { PermittedRpcMethodHooks } from './permitted';
21
export {
32
handlers as permittedMethods,
43
createSnapsMethodMiddleware,
54
} from './permitted';
6-
export * from './restricted';
5+
export type { PermittedRpcMethodHooks } from './permitted';
76
export { SnapCaveatType } from '@metamask/snaps-utils';
87
export { selectHooks } from './utils';
8+
export * from './endowments';
9+
export * from './permissions';
10+
export * from './restricted';

packages/snaps-controllers/src/snaps/permissions.ts renamed to packages/snaps-rpc-methods/src/permissions.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@ import type {
22
PermissionConstraint,
33
PermissionSpecificationConstraint,
44
} from '@metamask/permission-controller';
5-
import {
6-
caveatMappers,
7-
restrictedMethodPermissionBuilders,
8-
selectHooks,
9-
} from '@metamask/snaps-rpc-methods';
105
import type { SnapPermissions } from '@metamask/snaps-utils';
116
import { hasProperty } from '@metamask/utils';
127

138
import {
149
endowmentCaveatMappers,
1510
endowmentPermissionBuilders,
1611
} from './endowments';
12+
import {
13+
caveatMappers,
14+
restrictedMethodPermissionBuilders,
15+
} from './restricted';
16+
import { selectHooks } from './utils';
1717

1818
/**
1919
* Map initial permissions as defined in a Snap manifest to something that can

packages/snaps-simulator/src/features/simulation/sagas.test.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { GenericPermissionController } from '@metamask/permission-controller';
2-
import { processSnapPermissions } from '@metamask/snaps-controllers';
2+
import { processSnapPermissions } from '@metamask/snaps-rpc-methods';
33
import { SnapError } from '@metamask/snaps-sdk';
44
import {
55
DEFAULT_ENDOWMENTS,

packages/snaps-simulator/src/features/simulation/sagas.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ import {
1212
import {
1313
IframeExecutionService,
1414
setupMultiplex,
15-
endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications,
16-
processSnapPermissions,
17-
buildSnapEndowmentSpecifications,
18-
buildSnapRestrictedMethodSpecifications,
1915
} from '@metamask/snaps-controllers';
2016
import packageJson from '@metamask/snaps-execution-environments/package.json';
2117
import {
2218
createSnapsMethodMiddleware,
2319
caveatSpecifications as snapsCaveatsSpecifications,
20+
endowmentCaveatSpecifications as snapsEndowmentCaveatSpecifications,
21+
processSnapPermissions,
22+
buildSnapEndowmentSpecifications,
23+
buildSnapRestrictedMethodSpecifications,
2424
} from '@metamask/snaps-rpc-methods';
2525
import type {
2626
SnapManifest,

packages/snaps-simulator/src/features/simulation/snap-permissions.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { GenericPermissionController } from '@metamask/permission-controller';
2-
import { endowmentPermissionBuilders } from '@metamask/snaps-controllers';
2+
import { endowmentPermissionBuilders } from '@metamask/snaps-rpc-methods';
33
import { DEFAULT_ENDOWMENTS } from '@metamask/snaps-utils';
44

55
export const ExcludedSnapEndowments = Object.freeze([]);

0 commit comments

Comments
 (0)