@metamask/permission-controller 3.1.0 → 3.2.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 +11 -2
- package/dist/Caveat.d.ts +1 -0
- package/dist/Caveat.d.ts.map +1 -0
- package/dist/Permission.d.ts +9 -0
- package/dist/Permission.d.ts.map +1 -0
- package/dist/Permission.js.map +1 -1
- package/dist/PermissionController.d.ts +4 -1
- package/dist/PermissionController.d.ts.map +1 -0
- package/dist/PermissionController.js +13 -0
- package/dist/PermissionController.js.map +1 -1
- package/dist/SubjectMetadataController.d.ts +109 -0
- package/dist/SubjectMetadataController.d.ts.map +1 -0
- package/dist/SubjectMetadataController.js +139 -0
- package/dist/SubjectMetadataController.js.map +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/permission-middleware.d.ts +1 -0
- package/dist/permission-middleware.d.ts.map +1 -0
- package/dist/rpc-methods/getPermissions.d.ts +1 -0
- package/dist/rpc-methods/getPermissions.d.ts.map +1 -0
- package/dist/rpc-methods/index.d.ts +1 -0
- package/dist/rpc-methods/index.d.ts.map +1 -0
- package/dist/rpc-methods/requestPermissions.d.ts +1 -0
- package/dist/rpc-methods/requestPermissions.d.ts.map +1 -0
- package/dist/utils.d.ts +1 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { Patch } from 'immer';
|
|
2
|
+
import { Json } from '@metamask/types';
|
|
3
|
+
import { BaseControllerV2, RestrictedControllerMessenger } from '@metamask/base-controller';
|
|
4
|
+
import { HasPermissions, PermissionSubjectMetadata } from './PermissionController';
|
|
5
|
+
declare const controllerName = "SubjectMetadataController";
|
|
6
|
+
declare type SubjectOrigin = string;
|
|
7
|
+
/**
|
|
8
|
+
* The different kinds of subjects that MetaMask may interact with, including
|
|
9
|
+
* third parties and itself (e.g., when the background communicated with the UI).
|
|
10
|
+
*/
|
|
11
|
+
export declare enum SubjectType {
|
|
12
|
+
Extension = "extension",
|
|
13
|
+
Internal = "internal",
|
|
14
|
+
Unknown = "unknown",
|
|
15
|
+
Website = "website",
|
|
16
|
+
Snap = "snap"
|
|
17
|
+
}
|
|
18
|
+
export declare type SubjectMetadata = PermissionSubjectMetadata & {
|
|
19
|
+
[key: string]: Json;
|
|
20
|
+
name: string | null;
|
|
21
|
+
subjectType: SubjectType | null;
|
|
22
|
+
extensionId: string | null;
|
|
23
|
+
iconUrl: string | null;
|
|
24
|
+
};
|
|
25
|
+
declare type SubjectMetadataToAdd = PermissionSubjectMetadata & {
|
|
26
|
+
name?: string | null;
|
|
27
|
+
subjectType?: SubjectType | null;
|
|
28
|
+
extensionId?: string | null;
|
|
29
|
+
iconUrl?: string | null;
|
|
30
|
+
} & Record<string, Json>;
|
|
31
|
+
export declare type SubjectMetadataControllerState = {
|
|
32
|
+
subjectMetadata: Record<SubjectOrigin, SubjectMetadata>;
|
|
33
|
+
};
|
|
34
|
+
export declare type GetSubjectMetadataState = {
|
|
35
|
+
type: `${typeof controllerName}:getState`;
|
|
36
|
+
handler: () => SubjectMetadataControllerState;
|
|
37
|
+
};
|
|
38
|
+
export declare type GetSubjectMetadata = {
|
|
39
|
+
type: `${typeof controllerName}:getSubjectMetadata`;
|
|
40
|
+
handler: (origin: SubjectOrigin) => SubjectMetadata | undefined;
|
|
41
|
+
};
|
|
42
|
+
export declare type SubjectMetadataControllerActions = GetSubjectMetadataState | GetSubjectMetadata;
|
|
43
|
+
export declare type SubjectMetadataStateChange = {
|
|
44
|
+
type: `${typeof controllerName}:stateChange`;
|
|
45
|
+
payload: [SubjectMetadataControllerState, Patch[]];
|
|
46
|
+
};
|
|
47
|
+
export declare type SubjectMetadataControllerEvents = SubjectMetadataStateChange;
|
|
48
|
+
declare type AllowedActions = HasPermissions;
|
|
49
|
+
export declare type SubjectMetadataControllerMessenger = RestrictedControllerMessenger<typeof controllerName, SubjectMetadataControllerActions | AllowedActions, SubjectMetadataControllerEvents, AllowedActions['type'], never>;
|
|
50
|
+
declare type SubjectMetadataControllerOptions = {
|
|
51
|
+
messenger: SubjectMetadataControllerMessenger;
|
|
52
|
+
subjectCacheLimit: number;
|
|
53
|
+
state?: Partial<SubjectMetadataControllerState>;
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* A controller for storing metadata associated with permission subjects. More
|
|
57
|
+
* or less, a cache.
|
|
58
|
+
*/
|
|
59
|
+
export declare class SubjectMetadataController extends BaseControllerV2<typeof controllerName, SubjectMetadataControllerState, SubjectMetadataControllerMessenger> {
|
|
60
|
+
private subjectCacheLimit;
|
|
61
|
+
private subjectsWithoutPermissionsEncounteredSinceStartup;
|
|
62
|
+
private subjectHasPermissions;
|
|
63
|
+
constructor({ messenger, subjectCacheLimit, state, }: SubjectMetadataControllerOptions);
|
|
64
|
+
/**
|
|
65
|
+
* Clears the state of this controller. Also resets the cache of subjects
|
|
66
|
+
* encountered since startup, so as to not prematurely reach the cache limit.
|
|
67
|
+
*/
|
|
68
|
+
clearState(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Stores domain metadata for the given origin (subject). Deletes metadata for
|
|
71
|
+
* subjects without permissions in a FIFO manner once more than
|
|
72
|
+
* {@link SubjectMetadataController.subjectCacheLimit} distinct origins have
|
|
73
|
+
* been added since boot.
|
|
74
|
+
*
|
|
75
|
+
* In order to prevent a degraded user experience,
|
|
76
|
+
* metadata is never deleted for subjects with permissions, since metadata
|
|
77
|
+
* cannot yet be requested on demand.
|
|
78
|
+
*
|
|
79
|
+
* @param metadata - The subject metadata to store.
|
|
80
|
+
*/
|
|
81
|
+
addSubjectMetadata(metadata: SubjectMetadataToAdd): void;
|
|
82
|
+
/**
|
|
83
|
+
* Gets the subject metadata for the given origin, if any.
|
|
84
|
+
*
|
|
85
|
+
* @param origin - The origin for which to get the subject metadata.
|
|
86
|
+
* @returns The subject metadata, if any, or `undefined` otherwise.
|
|
87
|
+
*/
|
|
88
|
+
getSubjectMetadata(origin: SubjectOrigin): SubjectMetadata | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Deletes all subjects without permissions from the controller's state.
|
|
91
|
+
*/
|
|
92
|
+
trimMetadataState(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Returns a new state object that only includes subjects with permissions.
|
|
95
|
+
* This method is static because we want to call it in the constructor, before
|
|
96
|
+
* the controller's state is initialized.
|
|
97
|
+
*
|
|
98
|
+
* @param state - The state object to trim.
|
|
99
|
+
* @param hasPermissions - A function that returns a boolean indicating
|
|
100
|
+
* whether a particular subject (identified by its origin) has any
|
|
101
|
+
* permissions.
|
|
102
|
+
* @returns The new state object. If the specified `state` object has no
|
|
103
|
+
* subject metadata, the returned object will be equivalent to the default
|
|
104
|
+
* state of this controller.
|
|
105
|
+
*/
|
|
106
|
+
private static getTrimmedState;
|
|
107
|
+
}
|
|
108
|
+
export {};
|
|
109
|
+
//# sourceMappingURL=SubjectMetadataController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubjectMetadataController.d.ts","sourceRoot":"","sources":["../src/SubjectMetadataController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SubjectMetadataController = exports.SubjectType = void 0;
|
|
4
|
+
const base_controller_1 = require("@metamask/base-controller");
|
|
5
|
+
const controllerName = 'SubjectMetadataController';
|
|
6
|
+
/**
|
|
7
|
+
* The different kinds of subjects that MetaMask may interact with, including
|
|
8
|
+
* third parties and itself (e.g., when the background communicated with the UI).
|
|
9
|
+
*/
|
|
10
|
+
var SubjectType;
|
|
11
|
+
(function (SubjectType) {
|
|
12
|
+
SubjectType["Extension"] = "extension";
|
|
13
|
+
SubjectType["Internal"] = "internal";
|
|
14
|
+
SubjectType["Unknown"] = "unknown";
|
|
15
|
+
SubjectType["Website"] = "website";
|
|
16
|
+
SubjectType["Snap"] = "snap";
|
|
17
|
+
})(SubjectType = exports.SubjectType || (exports.SubjectType = {}));
|
|
18
|
+
const stateMetadata = {
|
|
19
|
+
subjectMetadata: { persist: true, anonymous: false },
|
|
20
|
+
};
|
|
21
|
+
const defaultState = {
|
|
22
|
+
subjectMetadata: {},
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* A controller for storing metadata associated with permission subjects. More
|
|
26
|
+
* or less, a cache.
|
|
27
|
+
*/
|
|
28
|
+
class SubjectMetadataController extends base_controller_1.BaseControllerV2 {
|
|
29
|
+
constructor({ messenger, subjectCacheLimit, state = {}, }) {
|
|
30
|
+
if (!Number.isInteger(subjectCacheLimit) || subjectCacheLimit < 1) {
|
|
31
|
+
throw new Error(`subjectCacheLimit must be a positive integer. Received: "${subjectCacheLimit}"`);
|
|
32
|
+
}
|
|
33
|
+
const hasPermissions = (origin) => {
|
|
34
|
+
return messenger.call('PermissionController:hasPermissions', origin);
|
|
35
|
+
};
|
|
36
|
+
super({
|
|
37
|
+
name: controllerName,
|
|
38
|
+
metadata: stateMetadata,
|
|
39
|
+
messenger,
|
|
40
|
+
state: Object.assign({}, SubjectMetadataController.getTrimmedState(state, hasPermissions)),
|
|
41
|
+
});
|
|
42
|
+
this.subjectHasPermissions = hasPermissions;
|
|
43
|
+
this.subjectCacheLimit = subjectCacheLimit;
|
|
44
|
+
this.subjectsWithoutPermissionsEncounteredSinceStartup = new Set();
|
|
45
|
+
this.messagingSystem.registerActionHandler(`${this.name}:getSubjectMetadata`, this.getSubjectMetadata.bind(this));
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Clears the state of this controller. Also resets the cache of subjects
|
|
49
|
+
* encountered since startup, so as to not prematurely reach the cache limit.
|
|
50
|
+
*/
|
|
51
|
+
clearState() {
|
|
52
|
+
this.subjectsWithoutPermissionsEncounteredSinceStartup.clear();
|
|
53
|
+
this.update((_draftState) => {
|
|
54
|
+
return Object.assign({}, defaultState);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Stores domain metadata for the given origin (subject). Deletes metadata for
|
|
59
|
+
* subjects without permissions in a FIFO manner once more than
|
|
60
|
+
* {@link SubjectMetadataController.subjectCacheLimit} distinct origins have
|
|
61
|
+
* been added since boot.
|
|
62
|
+
*
|
|
63
|
+
* In order to prevent a degraded user experience,
|
|
64
|
+
* metadata is never deleted for subjects with permissions, since metadata
|
|
65
|
+
* cannot yet be requested on demand.
|
|
66
|
+
*
|
|
67
|
+
* @param metadata - The subject metadata to store.
|
|
68
|
+
*/
|
|
69
|
+
addSubjectMetadata(metadata) {
|
|
70
|
+
const { origin } = metadata;
|
|
71
|
+
const newMetadata = Object.assign(Object.assign({}, metadata), { extensionId: metadata.extensionId || null, iconUrl: metadata.iconUrl || null, name: metadata.name || null, subjectType: metadata.subjectType || null });
|
|
72
|
+
let originToForget = null;
|
|
73
|
+
// We only delete the oldest encountered subject from the cache, again to
|
|
74
|
+
// ensure that the user's experience isn't degraded by missing icons etc.
|
|
75
|
+
if (this.subjectsWithoutPermissionsEncounteredSinceStartup.size >=
|
|
76
|
+
this.subjectCacheLimit) {
|
|
77
|
+
const cachedOrigin = this.subjectsWithoutPermissionsEncounteredSinceStartup
|
|
78
|
+
.values()
|
|
79
|
+
.next().value;
|
|
80
|
+
this.subjectsWithoutPermissionsEncounteredSinceStartup.delete(cachedOrigin);
|
|
81
|
+
if (!this.subjectHasPermissions(cachedOrigin)) {
|
|
82
|
+
originToForget = cachedOrigin;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.subjectsWithoutPermissionsEncounteredSinceStartup.add(origin);
|
|
86
|
+
this.update((draftState) => {
|
|
87
|
+
// Typecast: ts(2589)
|
|
88
|
+
draftState.subjectMetadata[origin] = newMetadata;
|
|
89
|
+
if (typeof originToForget === 'string') {
|
|
90
|
+
delete draftState.subjectMetadata[originToForget];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Gets the subject metadata for the given origin, if any.
|
|
96
|
+
*
|
|
97
|
+
* @param origin - The origin for which to get the subject metadata.
|
|
98
|
+
* @returns The subject metadata, if any, or `undefined` otherwise.
|
|
99
|
+
*/
|
|
100
|
+
getSubjectMetadata(origin) {
|
|
101
|
+
return this.state.subjectMetadata[origin];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Deletes all subjects without permissions from the controller's state.
|
|
105
|
+
*/
|
|
106
|
+
trimMetadataState() {
|
|
107
|
+
this.update((draftState) => {
|
|
108
|
+
return SubjectMetadataController.getTrimmedState(
|
|
109
|
+
// Typecast: ts(2589)
|
|
110
|
+
draftState, this.subjectHasPermissions);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Returns a new state object that only includes subjects with permissions.
|
|
115
|
+
* This method is static because we want to call it in the constructor, before
|
|
116
|
+
* the controller's state is initialized.
|
|
117
|
+
*
|
|
118
|
+
* @param state - The state object to trim.
|
|
119
|
+
* @param hasPermissions - A function that returns a boolean indicating
|
|
120
|
+
* whether a particular subject (identified by its origin) has any
|
|
121
|
+
* permissions.
|
|
122
|
+
* @returns The new state object. If the specified `state` object has no
|
|
123
|
+
* subject metadata, the returned object will be equivalent to the default
|
|
124
|
+
* state of this controller.
|
|
125
|
+
*/
|
|
126
|
+
static getTrimmedState(state, hasPermissions) {
|
|
127
|
+
const { subjectMetadata = {} } = state;
|
|
128
|
+
return {
|
|
129
|
+
subjectMetadata: Object.keys(subjectMetadata).reduce((newSubjectMetadata, origin) => {
|
|
130
|
+
if (hasPermissions(origin)) {
|
|
131
|
+
newSubjectMetadata[origin] = subjectMetadata[origin];
|
|
132
|
+
}
|
|
133
|
+
return newSubjectMetadata;
|
|
134
|
+
}, {}),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
exports.SubjectMetadataController = SubjectMetadataController;
|
|
139
|
+
//# sourceMappingURL=SubjectMetadataController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubjectMetadataController.js","sourceRoot":"","sources":["../src/SubjectMetadataController.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Patch } from 'immer';\nimport { Json } from '@metamask/types';\nimport {\n BaseControllerV2,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport {\n GenericPermissionController,\n HasPermissions,\n PermissionSubjectMetadata,\n} from './PermissionController';\n\nconst controllerName = 'SubjectMetadataController';\n\ntype SubjectOrigin = string;\n\n/**\n * The different kinds of subjects that MetaMask may interact with, including\n * third parties and itself (e.g., when the background communicated with the UI).\n */\nexport enum SubjectType {\n Extension = 'extension',\n Internal = 'internal',\n Unknown = 'unknown',\n Website = 'website',\n Snap = 'snap',\n}\n\nexport type SubjectMetadata = PermissionSubjectMetadata & {\n [key: string]: Json;\n // TODO:TS4.4 make optional\n name: string | null;\n subjectType: SubjectType | null;\n extensionId: string | null;\n iconUrl: string | null;\n};\n\ntype SubjectMetadataToAdd = PermissionSubjectMetadata & {\n name?: string | null;\n subjectType?: SubjectType | null;\n extensionId?: string | null;\n iconUrl?: string | null;\n} & Record<string, Json>;\n\nexport type SubjectMetadataControllerState = {\n subjectMetadata: Record<SubjectOrigin, SubjectMetadata>;\n};\n\nconst stateMetadata = {\n subjectMetadata: { persist: true, anonymous: false },\n};\n\nconst defaultState: SubjectMetadataControllerState = {\n subjectMetadata: {},\n};\n\nexport type GetSubjectMetadataState = {\n type: `${typeof controllerName}:getState`;\n handler: () => SubjectMetadataControllerState;\n};\n\nexport type GetSubjectMetadata = {\n type: `${typeof controllerName}:getSubjectMetadata`;\n handler: (origin: SubjectOrigin) => SubjectMetadata | undefined;\n};\n\nexport type SubjectMetadataControllerActions =\n | GetSubjectMetadataState\n | GetSubjectMetadata;\n\nexport type SubjectMetadataStateChange = {\n type: `${typeof controllerName}:stateChange`;\n payload: [SubjectMetadataControllerState, Patch[]];\n};\n\nexport type SubjectMetadataControllerEvents = SubjectMetadataStateChange;\n\ntype AllowedActions = HasPermissions;\n\nexport type SubjectMetadataControllerMessenger = RestrictedControllerMessenger<\n typeof controllerName,\n SubjectMetadataControllerActions | AllowedActions,\n SubjectMetadataControllerEvents,\n AllowedActions['type'],\n never\n>;\n\ntype SubjectMetadataControllerOptions = {\n messenger: SubjectMetadataControllerMessenger;\n subjectCacheLimit: number;\n state?: Partial<SubjectMetadataControllerState>;\n};\n\n/**\n * A controller for storing metadata associated with permission subjects. More\n * or less, a cache.\n */\nexport class SubjectMetadataController extends BaseControllerV2<\n typeof controllerName,\n SubjectMetadataControllerState,\n SubjectMetadataControllerMessenger\n> {\n private subjectCacheLimit: number;\n\n private subjectsWithoutPermissionsEncounteredSinceStartup: Set<string>;\n\n private subjectHasPermissions: GenericPermissionController['hasPermissions'];\n\n constructor({\n messenger,\n subjectCacheLimit,\n state = {},\n }: SubjectMetadataControllerOptions) {\n if (!Number.isInteger(subjectCacheLimit) || subjectCacheLimit < 1) {\n throw new Error(\n `subjectCacheLimit must be a positive integer. Received: \"${subjectCacheLimit}\"`,\n );\n }\n\n const hasPermissions = (origin: string) => {\n return messenger.call('PermissionController:hasPermissions', origin);\n };\n\n super({\n name: controllerName,\n metadata: stateMetadata,\n messenger,\n state: {\n ...SubjectMetadataController.getTrimmedState(state, hasPermissions),\n },\n });\n\n this.subjectHasPermissions = hasPermissions;\n this.subjectCacheLimit = subjectCacheLimit;\n this.subjectsWithoutPermissionsEncounteredSinceStartup = new Set();\n\n this.messagingSystem.registerActionHandler(\n `${this.name}:getSubjectMetadata`,\n this.getSubjectMetadata.bind(this),\n );\n }\n\n /**\n * Clears the state of this controller. Also resets the cache of subjects\n * encountered since startup, so as to not prematurely reach the cache limit.\n */\n clearState(): void {\n this.subjectsWithoutPermissionsEncounteredSinceStartup.clear();\n this.update((_draftState) => {\n return { ...defaultState };\n });\n }\n\n /**\n * Stores domain metadata for the given origin (subject). Deletes metadata for\n * subjects without permissions in a FIFO manner once more than\n * {@link SubjectMetadataController.subjectCacheLimit} distinct origins have\n * been added since boot.\n *\n * In order to prevent a degraded user experience,\n * metadata is never deleted for subjects with permissions, since metadata\n * cannot yet be requested on demand.\n *\n * @param metadata - The subject metadata to store.\n */\n addSubjectMetadata(metadata: SubjectMetadataToAdd): void {\n const { origin } = metadata;\n const newMetadata: SubjectMetadata = {\n ...metadata,\n extensionId: metadata.extensionId || null,\n iconUrl: metadata.iconUrl || null,\n name: metadata.name || null,\n subjectType: metadata.subjectType || null,\n };\n\n let originToForget: string | null = null;\n // We only delete the oldest encountered subject from the cache, again to\n // ensure that the user's experience isn't degraded by missing icons etc.\n if (\n this.subjectsWithoutPermissionsEncounteredSinceStartup.size >=\n this.subjectCacheLimit\n ) {\n const cachedOrigin =\n this.subjectsWithoutPermissionsEncounteredSinceStartup\n .values()\n .next().value;\n\n this.subjectsWithoutPermissionsEncounteredSinceStartup.delete(\n cachedOrigin,\n );\n\n if (!this.subjectHasPermissions(cachedOrigin)) {\n originToForget = cachedOrigin;\n }\n }\n\n this.subjectsWithoutPermissionsEncounteredSinceStartup.add(origin);\n\n this.update((draftState) => {\n // Typecast: ts(2589)\n draftState.subjectMetadata[origin] = newMetadata as any;\n if (typeof originToForget === 'string') {\n delete draftState.subjectMetadata[originToForget];\n }\n });\n }\n\n /**\n * Gets the subject metadata for the given origin, if any.\n *\n * @param origin - The origin for which to get the subject metadata.\n * @returns The subject metadata, if any, or `undefined` otherwise.\n */\n getSubjectMetadata(origin: SubjectOrigin): SubjectMetadata | undefined {\n return this.state.subjectMetadata[origin];\n }\n\n /**\n * Deletes all subjects without permissions from the controller's state.\n */\n trimMetadataState(): void {\n this.update((draftState) => {\n return SubjectMetadataController.getTrimmedState(\n // Typecast: ts(2589)\n draftState as any,\n this.subjectHasPermissions,\n );\n });\n }\n\n /**\n * Returns a new state object that only includes subjects with permissions.\n * This method is static because we want to call it in the constructor, before\n * the controller's state is initialized.\n *\n * @param state - The state object to trim.\n * @param hasPermissions - A function that returns a boolean indicating\n * whether a particular subject (identified by its origin) has any\n * permissions.\n * @returns The new state object. If the specified `state` object has no\n * subject metadata, the returned object will be equivalent to the default\n * state of this controller.\n */\n private static getTrimmedState(\n state: Partial<SubjectMetadataControllerState>,\n hasPermissions: SubjectMetadataController['subjectHasPermissions'],\n ): SubjectMetadataControllerState {\n const { subjectMetadata = {} } = state;\n\n return {\n subjectMetadata: Object.keys(subjectMetadata).reduce<\n Record<SubjectOrigin, SubjectMetadata>\n >((newSubjectMetadata, origin) => {\n if (hasPermissions(origin)) {\n newSubjectMetadata[origin] = subjectMetadata[origin];\n }\n return newSubjectMetadata;\n }, {}),\n };\n }\n}\n"]}
|
package/dist/errors.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,aAAK,eAAe,GAAG;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,eAAe,2EAMjD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,6BAQ5D;AAED,aAAK,gBAAgB,GAAG;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,gBAAgB,6BAKnD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtE,IAAI,CAAC,EAAE,IAAI,GACV,gBAAgB,CAAC,IAAI,CAAC,CAExB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,IAAI,GACV,gBAAgB,CAAC,IAAI,CAAC,CAExB;AAED,qBAAa,6BAA8B,SAAQ,KAAK;gBAC1C,MAAM,EAAE,OAAO;CAO5B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,MAAM,EAAE,MAAM;CAG3B;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IAChD,IAAI,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC7C,CAAC;gBAGA,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAO9C;AACD,qBAAa,2BAA4B,SAAQ,KAAK;gBACxC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAG3C;AAED,qBAAa,oCAAqC,SAAQ,KAAK;IACtD,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;gBAErB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAM5C;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IAC7C,IAAI,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;gBAEU,UAAU,EAAE,MAAM;gBAElB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAa/D;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IAC7C,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE,CAAC;gBAE9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO;CAMrE;AAED,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAK/D;AAED,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAK/D;AAED,qBAAa,kBAAmB,SAAQ,gBAAgB,CAAC,OAAO,CAAC;IAC/C,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;gBAE7C,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAQpE;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,IAAI,EAAE;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI5E;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IACzC,IAAI,EAAE;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI5E;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IACxC,IAAI,EAAE;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAI5E;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAC1C,IAAI,EAAE;QACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAM5E;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACtC,IAAI,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAMnE;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IACtC,IAAI,EAAE;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;gBAEU,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAMnE;AAED,qBAAa,gCAAiC,SAAQ,KAAK;IAClD,IAAI,EAAE;QACX,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,cAAc,EAAE,cAAc,CAAC;KAChC,CAAC;gBAGA,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,cAAc,EAAE,cAAc;CAOjC;AAED,qBAAa,+BAAgC,SAAQ,KAAK;gBAC5C,EAAE,EAAE,MAAM;CAGvB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,SAAS,CAAC;AACxB,OAAO,KAAK,oBAAoB,MAAM,eAAe,CAAC;AACtD,cAAc,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -33,4 +33,5 @@ __exportStar(require("./Permission"), exports);
|
|
|
33
33
|
__exportStar(require("./PermissionController"), exports);
|
|
34
34
|
__exportStar(require("./utils"), exports);
|
|
35
35
|
exports.permissionRpcMethods = __importStar(require("./rpc-methods"));
|
|
36
|
+
__exportStar(require("./SubjectMetadataController"), exports);
|
|
36
37
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,+CAA6B;AAC7B,yDAAuC;AACvC,0CAAwB;AACxB,sEAAsD","sourcesContent":["export * from './Caveat';\nexport * from './errors';\nexport * from './Permission';\nexport * from './PermissionController';\nexport * from './utils';\nexport * as permissionRpcMethods from './rpc-methods';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,+CAA6B;AAC7B,yDAAuC;AACvC,0CAAwB;AACxB,sEAAsD;AACtD,8DAA4C","sourcesContent":["export * from './Caveat';\nexport * from './errors';\nexport * from './Permission';\nexport * from './PermissionController';\nexport * from './utils';\nexport * as permissionRpcMethods from './rpc-methods';\nexport * from './SubjectMetadataController';\n"]}
|
|
@@ -30,3 +30,4 @@ declare type PermissionMiddlewareFactoryOptions = {
|
|
|
30
30
|
*/
|
|
31
31
|
export declare function getPermissionMiddlewareFactory({ executeRestrictedMethod, getRestrictedMethod, isUnrestrictedMethod, }: PermissionMiddlewareFactoryOptions): (subject: PermissionSubjectMetadata) => JsonRpcMiddleware<RestrictedMethodParameters, Json>;
|
|
32
32
|
export {};
|
|
33
|
+
//# sourceMappingURL=permission-middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-middleware.d.ts","sourceRoot":"","sources":["../src/permission-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,iBAAiB,EAKlB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,2BAA2B,EAC3B,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,GAAG,CAAC;AAEX,aAAK,kCAAkC,GAAG;IACxC,uBAAuB,EAAE,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;IACjF,mBAAmB,EAAE,2BAA2B,CAAC,qBAAqB,CAAC,CAAC;IACxE,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;CACnD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,8BAA8B,CAAC,EAC7C,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,GACrB,EAAE,kCAAkC,aAExB,yBAAyB,KACjC,kBAAkB,0BAA0B,EAAE,IAAI,CAAC,CA2CvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPermissions.d.ts","sourceRoot":"","sources":["../../src/rpc-methods/getPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,eAAO,MAAM,qBAAqB,EAAE,sBAAsB,CACxD,mBAAmB,EACnB,IAAI,EACJ,oBAAoB,EAAE,CAOvB,CAAC;AAEF,oBAAY,mBAAmB,GAAG;IAEhC,uBAAuB,EAAE,MAAM,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;CACzE,CAAC"}
|
|
@@ -2,3 +2,4 @@ import { RequestPermissionsHooks } from './requestPermissions';
|
|
|
2
2
|
import { GetPermissionsHooks } from './getPermissions';
|
|
3
3
|
export declare type PermittedRpcMethodHooks = RequestPermissionsHooks & GetPermissionsHooks;
|
|
4
4
|
export declare const handlers: (import("@metamask/types").PermittedHandlerExport<RequestPermissionsHooks, [import("..").RequestedPermissions], import("..").PermissionConstraint[]> | import("@metamask/types").PermittedHandlerExport<GetPermissionsHooks, void, import("..").PermissionConstraint[]>)[];
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rpc-methods/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,uBAAuB,EACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAyB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,oBAAY,uBAAuB,GAAG,uBAAuB,GAC3D,mBAAmB,CAAC;AAEtB,eAAO,MAAM,QAAQ,4QAAqD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestPermissions.d.ts","sourceRoot":"","sources":["../../src/rpc-methods/requestPermissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAIzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAEhF,eAAO,MAAM,yBAAyB,EAAE,sBAAsB,CAC5D,uBAAuB,EACvB;IAAC,oBAAoB;CAAC,EACtB,oBAAoB,EAAE,CAOvB,CAAC;AAEF,aAAK,kBAAkB,GAAG,CACxB,oBAAoB,EAAE,oBAAoB,EAC1C,EAAE,EAAE,MAAM,KACP,OAAO,CACV;IAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC;IAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAAC,CACvE,CAAC;AAEF,oBAAY,uBAAuB,GAAG;IACpC,2BAA2B,EAAE,kBAAkB,CAAC;CACjD,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -13,3 +13,4 @@ export declare enum MethodNames {
|
|
|
13
13
|
* whose specification type union to extract.
|
|
14
14
|
*/
|
|
15
15
|
export declare type ExtractSpecifications<SpecificationsMap extends CaveatSpecificationMap<CaveatSpecificationConstraint> | PermissionSpecificationMap<PermissionSpecificationConstraint>> = SpecificationsMap[keyof SpecificationsMap];
|
|
16
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iCAAiC,EACjC,0BAA0B,EAC3B,MAAM,cAAc,CAAC;AAEtB,oBAAY,WAAW;IACrB,kBAAkB,8BAA8B;IAChD,cAAc,0BAA0B;CACzC;AAED;;;;;;;GAOG;AACH,oBAAY,qBAAqB,CAC/B,iBAAiB,SACb,sBAAsB,CAAC,6BAA6B,CAAC,GACrD,0BAA0B,CAAC,iCAAiC,CAAC,IAC/D,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/permission-controller",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "Mediates access to JSON-RPC methods, used to interact with pieces of the MetaMask stack, via middleware for json-rpc-engine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -29,29 +29,29 @@
|
|
|
29
29
|
"test:watch": "jest --watch"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@metamask/approval-controller": "^2.
|
|
32
|
+
"@metamask/approval-controller": "^2.1.1",
|
|
33
33
|
"@metamask/base-controller": "^2.0.0",
|
|
34
|
-
"@metamask/controller-utils": "^3.
|
|
34
|
+
"@metamask/controller-utils": "^3.4.0",
|
|
35
35
|
"@metamask/types": "^1.1.0",
|
|
36
36
|
"@types/deep-freeze-strict": "^1.1.0",
|
|
37
37
|
"deep-freeze-strict": "^1.1.1",
|
|
38
|
-
"eth-rpc-errors": "^4.0.
|
|
38
|
+
"eth-rpc-errors": "^4.0.2",
|
|
39
39
|
"immer": "^9.0.6",
|
|
40
40
|
"json-rpc-engine": "^6.1.0",
|
|
41
41
|
"nanoid": "^3.1.31"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@metamask/auto-changelog": "^3.1.0",
|
|
45
|
-
"@types/jest": "^
|
|
45
|
+
"@types/jest": "^27.4.1",
|
|
46
46
|
"deepmerge": "^4.2.2",
|
|
47
|
-
"jest": "^
|
|
48
|
-
"ts-jest": "^
|
|
47
|
+
"jest": "^27.5.1",
|
|
48
|
+
"ts-jest": "^27.1.4",
|
|
49
49
|
"typedoc": "^0.22.15",
|
|
50
50
|
"typedoc-plugin-missing-exports": "^0.22.6",
|
|
51
51
|
"typescript": "~4.6.3"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
|
-
"@metamask/approval-controller": "^2.
|
|
54
|
+
"@metamask/approval-controller": "^2.1.1"
|
|
55
55
|
},
|
|
56
56
|
"engines": {
|
|
57
57
|
"node": ">=14.0.0"
|