@metamask/permission-controller 10.0.1 → 11.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.
- package/CHANGELOG.md +23 -1
- package/dist/Caveat.js +3 -3
- package/dist/Caveat.mjs +2 -2
- package/dist/PermissionController.js +6 -6
- package/dist/PermissionController.mjs +5 -5
- package/dist/SubjectMetadataController.js +2 -2
- package/dist/SubjectMetadataController.mjs +1 -1
- package/dist/{chunk-6V5UTS24.mjs → chunk-3WWJKO7P.mjs} +2 -2
- package/dist/{chunk-D7PWCWCC.js → chunk-3YOPLPVY.js} +4 -4
- package/dist/{chunk-SPOFDHOW.mjs → chunk-42QSJHWO.mjs} +3 -3
- package/dist/chunk-42QSJHWO.mjs.map +1 -0
- package/dist/{chunk-NOB77ENO.mjs → chunk-4FMYQC3Y.mjs} +4 -4
- package/dist/{chunk-ZTBBRCDR.mjs → chunk-4NAVRO44.mjs} +4 -4
- package/dist/chunk-4NAVRO44.mjs.map +1 -0
- package/dist/{chunk-73M67Z5X.mjs → chunk-5RFW5THA.mjs} +2 -2
- package/dist/{chunk-73M67Z5X.mjs.map → chunk-5RFW5THA.mjs.map} +1 -1
- package/dist/{chunk-AQ46ICF5.js → chunk-6PXDVUYM.js} +7 -7
- package/dist/{chunk-FVYYHAVF.mjs → chunk-74H4CVH7.mjs} +3 -3
- package/dist/{chunk-FVYYHAVF.mjs.map → chunk-74H4CVH7.mjs.map} +1 -1
- package/dist/{chunk-HZPWUOQB.js → chunk-7A3VYLCK.js} +4 -4
- package/dist/{chunk-HZPWUOQB.js.map → chunk-7A3VYLCK.js.map} +1 -1
- package/dist/{chunk-R56CBYD3.js → chunk-B6PDRQ7N.js} +73 -75
- package/dist/{chunk-7WEYLBME.mjs.map → chunk-B6PDRQ7N.js.map} +1 -1
- package/dist/{chunk-7WEYLBME.mjs → chunk-COGJLF22.mjs} +19 -21
- package/dist/chunk-COGJLF22.mjs.map +1 -0
- package/dist/{chunk-M5GM7UFU.js → chunk-F5TBMVWC.js} +3 -3
- package/dist/{chunk-4YXP3WEE.js → chunk-FYADAA2G.js} +4 -2
- package/dist/chunk-FYADAA2G.js.map +1 -0
- package/dist/{chunk-VHHS2FJX.mjs → chunk-G4BWJ7EA.mjs} +4 -2
- package/dist/chunk-G4BWJ7EA.mjs.map +1 -0
- package/dist/{chunk-5NYMBY4A.mjs → chunk-I62TTXZ6.mjs} +2 -2
- package/dist/{chunk-SKKQZ5E6.mjs → chunk-OCLNDUYO.mjs} +3 -3
- package/dist/{chunk-SKKQZ5E6.mjs.map → chunk-OCLNDUYO.mjs.map} +1 -1
- package/dist/{chunk-HRDKMOYS.js → chunk-VBIZGGQL.js} +2 -2
- package/dist/{chunk-HRDKMOYS.js.map → chunk-VBIZGGQL.js.map} +1 -1
- package/dist/{chunk-TAK6LXU6.js → chunk-VQPP5PWS.js} +4 -4
- package/dist/chunk-VQPP5PWS.js.map +1 -0
- package/dist/{chunk-IPKS33XA.js → chunk-VSDHL2GQ.js} +3 -3
- package/dist/{chunk-IPKS33XA.js.map → chunk-VSDHL2GQ.js.map} +1 -1
- package/dist/{chunk-6UCIDD5V.js → chunk-X4ZAW4QR.js} +5 -5
- package/dist/{chunk-6UCIDD5V.js.map → chunk-X4ZAW4QR.js.map} +1 -1
- package/dist/errors.js +2 -2
- package/dist/errors.mjs +1 -1
- package/dist/index.js +11 -11
- package/dist/index.mjs +10 -10
- package/dist/permission-middleware.js +3 -3
- package/dist/permission-middleware.mjs +2 -2
- package/dist/rpc-methods/getPermissions.js +3 -3
- package/dist/rpc-methods/getPermissions.mjs +2 -2
- package/dist/rpc-methods/index.js +7 -7
- package/dist/rpc-methods/index.mjs +6 -6
- package/dist/rpc-methods/requestPermissions.js +4 -4
- package/dist/rpc-methods/requestPermissions.mjs +3 -3
- package/dist/rpc-methods/revokePermissions.js +4 -4
- package/dist/rpc-methods/revokePermissions.mjs +3 -3
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/PermissionController.d.ts +10 -10
- package/dist/types/PermissionController.d.ts.map +1 -1
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/utils.d.ts +9 -9
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.mjs +1 -1
- package/package.json +12 -11
- package/dist/chunk-4YXP3WEE.js.map +0 -1
- package/dist/chunk-R56CBYD3.js.map +0 -1
- package/dist/chunk-SPOFDHOW.mjs.map +0 -1
- package/dist/chunk-TAK6LXU6.js.map +0 -1
- package/dist/chunk-VHHS2FJX.mjs.map +0 -1
- package/dist/chunk-ZTBBRCDR.mjs.map +0 -1
- /package/dist/{chunk-6V5UTS24.mjs.map → chunk-3WWJKO7P.mjs.map} +0 -0
- /package/dist/{chunk-D7PWCWCC.js.map → chunk-3YOPLPVY.js.map} +0 -0
- /package/dist/{chunk-NOB77ENO.mjs.map → chunk-4FMYQC3Y.mjs.map} +0 -0
- /package/dist/{chunk-AQ46ICF5.js.map → chunk-6PXDVUYM.js.map} +0 -0
- /package/dist/{chunk-M5GM7UFU.js.map → chunk-F5TBMVWC.js.map} +0 -0
- /package/dist/{chunk-5NYMBY4A.mjs.map → chunk-I62TTXZ6.mjs.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [11.0.1]
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Bump `@metamask/base-controller` from `^6.0.3` to `^7.0.0` ([#4643](https://github.com/MetaMask/core/pull/4643))
|
|
15
|
+
- Bump `@metamask/controller-utils` from `^11.0.2` to `^11.2.0` ([#4639](https://github.com/MetaMask/core/pull/4639), [#4651](https://github.com/MetaMask/core/pull/4651))
|
|
16
|
+
- Bump `typescript` from `~5.0.4` to `~5.2.2` ([#4576](https://github.com/MetaMask/core/pull/4576), [#4584](https://github.com/MetaMask/core/pull/4584))
|
|
17
|
+
|
|
18
|
+
## [11.0.0]
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **BREAKING:** Rename enum property names to match PascalCase instead of camelCase ([#4521](https://github.com/MetaMask/core/pull/4521))
|
|
23
|
+
- The affected enums are: `CaveatMutatorOperations`, `MethodNames`.
|
|
24
|
+
- Bump TypeScript version to `~5.0.4` and set `moduleResolution` option to `Node16` ([#3645](https://github.com/MetaMask/core/pull/3645))
|
|
25
|
+
- Bump `@metamask/base-controller` from `^6.0.1` to `^6.0.2` ([#4544](https://github.com/MetaMask/core/pull/4544))
|
|
26
|
+
- Bump `@metamask/controller-utils` from `^11.0.1` to `^11.0.2` ([#4544](https://github.com/MetaMask/core/pull/4544))
|
|
27
|
+
- Bump `@metamask/json-rpc-engine` from `^9.0.1` to `^9.0.2` ([#4544](https://github.com/MetaMask/core/pull/4544))
|
|
28
|
+
- Bump `@metamask/utils` from `^9.0.0` to `^9.1.0` ([#4529](https://github.com/MetaMask/core/pull/4529))
|
|
29
|
+
|
|
10
30
|
## [10.0.1]
|
|
11
31
|
|
|
12
32
|
### Changed
|
|
@@ -252,7 +272,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
252
272
|
|
|
253
273
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
254
274
|
|
|
255
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@
|
|
275
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@11.0.1...HEAD
|
|
276
|
+
[11.0.1]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@11.0.0...@metamask/permission-controller@11.0.1
|
|
277
|
+
[11.0.0]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@10.0.1...@metamask/permission-controller@11.0.0
|
|
256
278
|
[10.0.1]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@10.0.0...@metamask/permission-controller@10.0.1
|
|
257
279
|
[10.0.0]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@9.1.1...@metamask/permission-controller@10.0.0
|
|
258
280
|
[9.1.1]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@9.1.0...@metamask/permission-controller@9.1.1
|
package/dist/Caveat.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunk3YOPLPVYjs = require('./chunk-3YOPLPVY.js');
|
|
5
5
|
require('./chunk-ZH4MLSXX.js');
|
|
6
|
-
require('./chunk-
|
|
6
|
+
require('./chunk-FYADAA2G.js');
|
|
7
7
|
require('./chunk-Z2XKIXLS.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
exports.decorateWithCaveats =
|
|
11
|
+
exports.decorateWithCaveats = _chunk3YOPLPVYjs.decorateWithCaveats; exports.isRestrictedMethodCaveatSpecification = _chunk3YOPLPVYjs.isRestrictedMethodCaveatSpecification;
|
|
12
12
|
//# sourceMappingURL=Caveat.js.map
|
package/dist/Caveat.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
decorateWithCaveats,
|
|
3
3
|
isRestrictedMethodCaveatSpecification
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-3WWJKO7P.mjs";
|
|
5
5
|
import "./chunk-HYMS7IGB.mjs";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-G4BWJ7EA.mjs";
|
|
7
7
|
import "./chunk-2L4QPE5A.mjs";
|
|
8
8
|
export {
|
|
9
9
|
decorateWithCaveats,
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
4
|
+
var _chunkB6PDRQ7Njs = require('./chunk-B6PDRQ7N.js');
|
|
5
|
+
require('./chunk-3YOPLPVY.js');
|
|
6
6
|
require('./chunk-ZH4MLSXX.js');
|
|
7
|
-
require('./chunk-
|
|
8
|
-
require('./chunk-
|
|
9
|
-
require('./chunk-
|
|
7
|
+
require('./chunk-F5TBMVWC.js');
|
|
8
|
+
require('./chunk-FYADAA2G.js');
|
|
9
|
+
require('./chunk-VQPP5PWS.js');
|
|
10
10
|
require('./chunk-Z2XKIXLS.js');
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.CaveatMutatorOperation =
|
|
14
|
+
exports.CaveatMutatorOperation = _chunkB6PDRQ7Njs.CaveatMutatorOperation; exports.PermissionController = _chunkB6PDRQ7Njs.PermissionController;
|
|
15
15
|
//# sourceMappingURL=PermissionController.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CaveatMutatorOperation,
|
|
3
3
|
PermissionController
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-COGJLF22.mjs";
|
|
5
|
+
import "./chunk-3WWJKO7P.mjs";
|
|
6
6
|
import "./chunk-HYMS7IGB.mjs";
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-I62TTXZ6.mjs";
|
|
8
|
+
import "./chunk-G4BWJ7EA.mjs";
|
|
9
|
+
import "./chunk-4NAVRO44.mjs";
|
|
10
10
|
import "./chunk-2L4QPE5A.mjs";
|
|
11
11
|
export {
|
|
12
12
|
CaveatMutatorOperation,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkVSDHL2GQjs = require('./chunk-VSDHL2GQ.js');
|
|
5
5
|
require('./chunk-Z2XKIXLS.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.SubjectMetadataController =
|
|
9
|
+
exports.SubjectMetadataController = _chunkVSDHL2GQjs.SubjectMetadataController; exports.SubjectType = _chunkVSDHL2GQjs.SubjectType;
|
|
10
10
|
//# sourceMappingURL=SubjectMetadataController.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CaveatSpecificationMismatchError,
|
|
3
3
|
UnrecognizedCaveatTypeError
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-G4BWJ7EA.mjs";
|
|
5
5
|
|
|
6
6
|
// src/Caveat.ts
|
|
7
7
|
import { hasProperty } from "@metamask/utils";
|
|
@@ -34,4 +34,4 @@ export {
|
|
|
34
34
|
isRestrictedMethodCaveatSpecification,
|
|
35
35
|
decorateWithCaveats
|
|
36
36
|
};
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
37
|
+
//# sourceMappingURL=chunk-3WWJKO7P.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkFYADAA2Gjs = require('./chunk-FYADAA2G.js');
|
|
5
5
|
|
|
6
6
|
// src/Caveat.ts
|
|
7
7
|
var _utils = require('@metamask/utils');
|
|
@@ -17,10 +17,10 @@ function decorateWithCaveats(methodImplementation, permission, caveatSpecificati
|
|
|
17
17
|
for (const caveat of caveats) {
|
|
18
18
|
const specification = caveatSpecifications[caveat.type];
|
|
19
19
|
if (!specification) {
|
|
20
|
-
throw new (0,
|
|
20
|
+
throw new (0, _chunkFYADAA2Gjs.UnrecognizedCaveatTypeError)(caveat.type);
|
|
21
21
|
}
|
|
22
22
|
if (!isRestrictedMethodCaveatSpecification(specification)) {
|
|
23
|
-
throw new (0,
|
|
23
|
+
throw new (0, _chunkFYADAA2Gjs.CaveatSpecificationMismatchError)(
|
|
24
24
|
specification,
|
|
25
25
|
"RestrictedMethod" /* RestrictedMethod */
|
|
26
26
|
);
|
|
@@ -34,4 +34,4 @@ function decorateWithCaveats(methodImplementation, permission, caveatSpecificati
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
exports.isRestrictedMethodCaveatSpecification = isRestrictedMethodCaveatSpecification; exports.decorateWithCaveats = decorateWithCaveats;
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
37
|
+
//# sourceMappingURL=chunk-3YOPLPVY.js.map
|
|
@@ -41,13 +41,13 @@ var SubjectMetadataController = class _SubjectMetadataController extends BaseCon
|
|
|
41
41
|
this.subjectCacheLimit = subjectCacheLimit;
|
|
42
42
|
this.subjectsWithoutPermissionsEncounteredSinceStartup = /* @__PURE__ */ new Set();
|
|
43
43
|
this.messagingSystem.registerActionHandler(
|
|
44
|
-
//
|
|
44
|
+
// ESLint is confused by the string literal type.
|
|
45
45
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
46
46
|
`${this.name}:getSubjectMetadata`,
|
|
47
47
|
this.getSubjectMetadata.bind(this)
|
|
48
48
|
);
|
|
49
49
|
this.messagingSystem.registerActionHandler(
|
|
50
|
-
//
|
|
50
|
+
// ESLint is confused by the string literal type.
|
|
51
51
|
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
52
52
|
`${this.name}:addSubjectMetadata`,
|
|
53
53
|
this.addSubjectMetadata.bind(this)
|
|
@@ -152,4 +152,4 @@ export {
|
|
|
152
152
|
SubjectType,
|
|
153
153
|
SubjectMetadataController
|
|
154
154
|
};
|
|
155
|
-
//# sourceMappingURL=chunk-
|
|
155
|
+
//# sourceMappingURL=chunk-42QSJHWO.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/SubjectMetadataController.ts"],"sourcesContent":["import type {\n ControllerGetStateAction,\n ControllerStateChangeEvent,\n RestrictedControllerMessenger,\n} from '@metamask/base-controller';\nimport { BaseController } from '@metamask/base-controller';\nimport type { Json } from '@metamask/utils';\n\nimport type {\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 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 = ControllerGetStateAction<\n typeof controllerName,\n SubjectMetadataControllerState\n>;\n\nexport type GetSubjectMetadata = {\n type: `${typeof controllerName}:getSubjectMetadata`;\n handler: (origin: SubjectOrigin) => SubjectMetadata | undefined;\n};\n\nexport type AddSubjectMetadata = {\n type: `${typeof controllerName}:addSubjectMetadata`;\n handler: (metadata: SubjectMetadataToAdd) => void;\n};\n\nexport type SubjectMetadataControllerActions =\n | GetSubjectMetadataState\n | GetSubjectMetadata\n | AddSubjectMetadata;\n\nexport type SubjectMetadataStateChange = ControllerStateChangeEvent<\n typeof controllerName,\n SubjectMetadataControllerState\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 BaseController<\n typeof controllerName,\n SubjectMetadataControllerState,\n SubjectMetadataControllerMessenger\n> {\n private readonly subjectCacheLimit: number;\n\n private readonly subjectsWithoutPermissionsEncounteredSinceStartup: Set<string>;\n\n private readonly 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 // ESLint is confused by the string literal type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${this.name}:getSubjectMetadata`,\n this.getSubjectMetadata.bind(this),\n );\n\n this.messagingSystem.registerActionHandler(\n // ESLint is confused by the string literal type.\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n `${this.name}:addSubjectMetadata`,\n this.addSubjectMetadata.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 draftState.subjectMetadata[origin] = newMetadata;\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 // @ts-expect-error ts(2589)\n return SubjectMetadataController.getTrimmedState(\n draftState,\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"],"mappings":"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","names":["SubjectType"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getPermissionsHandler
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5RFW5THA.mjs";
|
|
4
4
|
import {
|
|
5
5
|
requestPermissionsHandler
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-OCLNDUYO.mjs";
|
|
7
7
|
import {
|
|
8
8
|
revokePermissionsHandler
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-74H4CVH7.mjs";
|
|
10
10
|
import {
|
|
11
11
|
__export
|
|
12
12
|
} from "./chunk-2L4QPE5A.mjs";
|
|
@@ -26,4 +26,4 @@ export {
|
|
|
26
26
|
handlers,
|
|
27
27
|
rpc_methods_exports
|
|
28
28
|
};
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-4FMYQC3Y.mjs.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/utils.ts
|
|
2
2
|
var MethodNames = /* @__PURE__ */ ((MethodNames2) => {
|
|
3
|
-
MethodNames2["
|
|
4
|
-
MethodNames2["
|
|
5
|
-
MethodNames2["
|
|
3
|
+
MethodNames2["RequestPermissions"] = "wallet_requestPermissions";
|
|
4
|
+
MethodNames2["GetPermissions"] = "wallet_getPermissions";
|
|
5
|
+
MethodNames2["RevokePermissions"] = "wallet_revokePermissions";
|
|
6
6
|
return MethodNames2;
|
|
7
7
|
})(MethodNames || {});
|
|
8
8
|
function collectUniqueAndPairedCaveats(leftPermission, rightPermission) {
|
|
@@ -32,4 +32,4 @@ export {
|
|
|
32
32
|
MethodNames,
|
|
33
33
|
collectUniqueAndPairedCaveats
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=chunk-
|
|
35
|
+
//# sourceMappingURL=chunk-4NAVRO44.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts"],"sourcesContent":["import type {\n JsonRpcEngineEndCallback,\n JsonRpcEngineNextCallback,\n} from '@metamask/json-rpc-engine';\nimport type {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport type {\n CaveatConstraint,\n CaveatSpecificationConstraint,\n CaveatSpecificationMap,\n} from './Caveat';\nimport type {\n PermissionConstraint,\n PermissionSpecificationConstraint,\n PermissionSpecificationMap,\n} from './Permission';\n\nexport enum MethodNames {\n RequestPermissions = 'wallet_requestPermissions',\n GetPermissions = 'wallet_getPermissions',\n RevokePermissions = 'wallet_revokePermissions',\n}\n\n/**\n * Utility type for extracting a union of all individual caveat or permission\n * specification types from a {@link CaveatSpecificationMap} or\n * {@link PermissionSpecificationMap}.\n *\n * @template SpecificationsMap - The caveat or permission specifications map\n * whose specification type union to extract.\n */\nexport type ExtractSpecifications<\n SpecificationsMap extends\n | CaveatSpecificationMap<CaveatSpecificationConstraint>\n | PermissionSpecificationMap<PermissionSpecificationConstraint>,\n> = SpecificationsMap[keyof SpecificationsMap];\n\n/**\n * A middleware function for handling a permitted method.\n */\nexport type HandlerMiddlewareFunction<\n Hooks,\n Params extends JsonRpcParams,\n Result extends Json,\n> = (\n req: JsonRpcRequest<Params>,\n res: PendingJsonRpcResponse<Result>,\n next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n hooks: Hooks,\n) => void | Promise<void>;\n\n/**\n * We use a mapped object type in order to create a type that requires the\n * presence of the names of all hooks for the given handler.\n * This can then be used to select only the necessary hooks whenever a method\n * is called for purposes of POLA.\n */\nexport type HookNames<HookMap> = {\n [Property in keyof HookMap]: true;\n};\n\n/**\n * A handler for a permitted method.\n */\nexport type PermittedHandlerExport<\n Hooks,\n Params extends JsonRpcParams,\n Result extends Json,\n> = {\n implementation: HandlerMiddlewareFunction<Hooks, Params, Result>;\n hookNames: HookNames<Hooks>;\n methodNames: string[];\n};\n\n/**\n * Given two permission objects, computes 3 sets:\n * - The set of caveat pairs that are common to both permissions.\n * - The set of caveats that are unique to the existing permission.\n * - The set of caveats that are unique to the requested permission.\n *\n * Assumes that the caveat arrays of both permissions are valid.\n *\n * @param leftPermission - The left-hand permission.\n * @param rightPermission - The right-hand permission.\n * @returns The sets of caveat pairs and unique caveats.\n */\nexport function collectUniqueAndPairedCaveats(\n leftPermission: Partial<PermissionConstraint> | undefined,\n rightPermission: Partial<PermissionConstraint>,\n) {\n const leftCaveats = leftPermission?.caveats?.slice() ?? [];\n const rightCaveats = rightPermission.caveats?.slice() ?? [];\n const leftUniqueCaveats: CaveatConstraint[] = [];\n const caveatPairs: [CaveatConstraint, CaveatConstraint][] = [];\n\n leftCaveats.forEach((leftCaveat) => {\n const rightCaveatIndex = rightCaveats.findIndex(\n (rightCaveat) => rightCaveat.type === leftCaveat.type,\n );\n\n if (rightCaveatIndex === -1) {\n leftUniqueCaveats.push(leftCaveat);\n } else {\n caveatPairs.push([leftCaveat, rightCaveats[rightCaveatIndex]]);\n rightCaveats.splice(rightCaveatIndex, 1);\n }\n });\n\n return {\n caveatPairs,\n leftUniqueCaveats,\n rightUniqueCaveats: [...rightCaveats],\n };\n}\n"],"mappings":";AAsBO,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,wBAAqB;AACrB,EAAAA,aAAA,oBAAiB;AACjB,EAAAA,aAAA,uBAAoB;AAHV,SAAAA;AAAA,GAAA;AAsEL,SAAS,8BACd,gBACA,iBACA;AACA,QAAM,cAAc,gBAAgB,SAAS,MAAM,KAAK,CAAC;AACzD,QAAM,eAAe,gBAAgB,SAAS,MAAM,KAAK,CAAC;AAC1D,QAAM,oBAAwC,CAAC;AAC/C,QAAM,cAAsD,CAAC;AAE7D,cAAY,QAAQ,CAAC,eAAe;AAClC,UAAM,mBAAmB,aAAa;AAAA,MACpC,CAAC,gBAAgB,YAAY,SAAS,WAAW;AAAA,IACnD;AAEA,QAAI,qBAAqB,IAAI;AAC3B,wBAAkB,KAAK,UAAU;AAAA,IACnC,OAAO;AACL,kBAAY,KAAK,CAAC,YAAY,aAAa,gBAAgB,CAAC,CAAC;AAC7D,mBAAa,OAAO,kBAAkB,CAAC;AAAA,IACzC;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,oBAAoB,CAAC,GAAG,YAAY;AAAA,EACtC;AACF;","names":["MethodNames"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/rpc-methods/getPermissions.ts
|
|
2
2
|
var getPermissionsHandler = {
|
|
3
|
-
methodNames: ["wallet_getPermissions" /*
|
|
3
|
+
methodNames: ["wallet_getPermissions" /* GetPermissions */],
|
|
4
4
|
implementation: getPermissionsImplementation,
|
|
5
5
|
hookNames: {
|
|
6
6
|
getPermissionsForOrigin: true
|
|
@@ -14,4 +14,4 @@ async function getPermissionsImplementation(_req, res, _next, end, { getPermissi
|
|
|
14
14
|
export {
|
|
15
15
|
getPermissionsHandler
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-5RFW5THA.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rpc-methods/getPermissions.ts"],"sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport type { PermissionConstraint } from '../Permission';\nimport type { SubjectPermissions } from '../PermissionController';\nimport type { PermittedHandlerExport } from '../utils';\nimport { MethodNames } from '../utils';\n\nexport const getPermissionsHandler: PermittedHandlerExport<\n GetPermissionsHooks,\n [],\n PermissionConstraint[]\n> = {\n methodNames: [MethodNames.
|
|
1
|
+
{"version":3,"sources":["../src/rpc-methods/getPermissions.ts"],"sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { PendingJsonRpcResponse } from '@metamask/utils';\n\nimport type { PermissionConstraint } from '../Permission';\nimport type { SubjectPermissions } from '../PermissionController';\nimport type { PermittedHandlerExport } from '../utils';\nimport { MethodNames } from '../utils';\n\nexport const getPermissionsHandler: PermittedHandlerExport<\n GetPermissionsHooks,\n [],\n PermissionConstraint[]\n> = {\n methodNames: [MethodNames.GetPermissions],\n implementation: getPermissionsImplementation,\n hookNames: {\n getPermissionsForOrigin: true,\n },\n};\n\nexport type GetPermissionsHooks = {\n // This must be bound to the requesting origin.\n getPermissionsForOrigin: () => SubjectPermissions<PermissionConstraint>;\n};\n\n/**\n * Get Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param _req - The JsonRpcEngine request - unused\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.getPermissionsForOrigin - The specific method hook needed for this method implementation\n * @returns A promise that resolves to nothing\n */\nasync function getPermissionsImplementation(\n _req: unknown,\n res: PendingJsonRpcResponse<PermissionConstraint[]>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { getPermissionsForOrigin }: GetPermissionsHooks,\n): Promise<void> {\n res.result = Object.values(getPermissionsForOrigin() || {});\n return end();\n}\n"],"mappings":";AAQO,IAAM,wBAIT;AAAA,EACF,aAAa,6CAA2B;AAAA,EACxC,gBAAgB;AAAA,EAChB,WAAW;AAAA,IACT,yBAAyB;AAAA,EAC3B;AACF;AAkBA,eAAe,6BACb,MACA,KACA,OACA,KACA,EAAE,wBAAwB,GACX;AACf,MAAI,SAAS,OAAO,OAAO,wBAAwB,KAAK,CAAC,CAAC;AAC1D,SAAO,IAAI;AACb;","names":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkVBIZGGQLjs = require('./chunk-VBIZGGQL.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunk7A3VYLCKjs = require('./chunk-7A3VYLCK.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkX4ZAW4QRjs = require('./chunk-X4ZAW4QR.js');
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
var _chunkZ2XKIXLSjs = require('./chunk-Z2XKIXLS.js');
|
|
@@ -17,13 +17,13 @@ _chunkZ2XKIXLSjs.__export.call(void 0, rpc_methods_exports, {
|
|
|
17
17
|
handlers: () => handlers
|
|
18
18
|
});
|
|
19
19
|
var handlers = [
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
_chunk7A3VYLCKjs.requestPermissionsHandler,
|
|
21
|
+
_chunkVBIZGGQLjs.getPermissionsHandler,
|
|
22
|
+
_chunkX4ZAW4QRjs.revokePermissionsHandler
|
|
23
23
|
];
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
exports.handlers = handlers; exports.rpc_methods_exports = rpc_methods_exports;
|
|
29
|
-
//# sourceMappingURL=chunk-
|
|
29
|
+
//# sourceMappingURL=chunk-6PXDVUYM.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
invalidParams
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-G4BWJ7EA.mjs";
|
|
4
4
|
|
|
5
5
|
// src/rpc-methods/revokePermissions.ts
|
|
6
6
|
import {
|
|
7
7
|
isNonEmptyArray
|
|
8
8
|
} from "@metamask/utils";
|
|
9
9
|
var revokePermissionsHandler = {
|
|
10
|
-
methodNames: ["wallet_revokePermissions" /*
|
|
10
|
+
methodNames: ["wallet_revokePermissions" /* RevokePermissions */],
|
|
11
11
|
implementation: revokePermissionsImplementation,
|
|
12
12
|
hookNames: {
|
|
13
13
|
revokePermissionsForOrigin: true
|
|
@@ -31,4 +31,4 @@ async function revokePermissionsImplementation(req, res, _next, end, { revokePer
|
|
|
31
31
|
export {
|
|
32
32
|
revokePermissionsHandler
|
|
33
33
|
};
|
|
34
|
-
//# sourceMappingURL=chunk-
|
|
34
|
+
//# sourceMappingURL=chunk-74H4CVH7.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rpc-methods/revokePermissions.ts"],"sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport {\n isNonEmptyArray,\n type Json,\n type JsonRpcRequest,\n type NonEmptyArray,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { invalidParams } from '../errors';\nimport type { PermissionConstraint } from '../Permission';\nimport type { PermittedHandlerExport } from '../utils';\nimport { MethodNames } from '../utils';\n\nexport const revokePermissionsHandler: PermittedHandlerExport<\n RevokePermissionsHooks,\n RevokePermissionArgs,\n null\n> = {\n methodNames: [MethodNames.
|
|
1
|
+
{"version":3,"sources":["../src/rpc-methods/revokePermissions.ts"],"sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport {\n isNonEmptyArray,\n type Json,\n type JsonRpcRequest,\n type NonEmptyArray,\n type PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport { invalidParams } from '../errors';\nimport type { PermissionConstraint } from '../Permission';\nimport type { PermittedHandlerExport } from '../utils';\nimport { MethodNames } from '../utils';\n\nexport const revokePermissionsHandler: PermittedHandlerExport<\n RevokePermissionsHooks,\n RevokePermissionArgs,\n null\n> = {\n methodNames: [MethodNames.RevokePermissions],\n implementation: revokePermissionsImplementation,\n hookNames: {\n revokePermissionsForOrigin: true,\n },\n};\n\nexport type RevokePermissionArgs = Record<\n PermissionConstraint['parentCapability'],\n Json\n>;\n\ntype RevokePermissions = (\n permissions: NonEmptyArray<PermissionConstraint['parentCapability']>,\n) => void;\n\nexport type RevokePermissionsHooks = {\n revokePermissionsForOrigin: RevokePermissions;\n};\n\n/**\n * Revoke Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin\n * @returns A promise that resolves to nothing\n */\nasync function revokePermissionsImplementation(\n req: JsonRpcRequest<RevokePermissionArgs>,\n res: PendingJsonRpcResponse<null>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { revokePermissionsForOrigin }: RevokePermissionsHooks,\n): Promise<void> {\n const { params } = req;\n\n const param = params?.[0];\n\n if (!param) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n // For now, this API revokes the entire permission key\n // even if caveats are specified.\n const permissionKeys = Object.keys(param);\n\n if (!isNonEmptyArray(permissionKeys)) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n revokePermissionsForOrigin(permissionKeys);\n\n res.result = null;\n\n return end();\n}\n"],"mappings":";;;;;AACA;AAAA,EACE;AAAA,OAKK;AAOA,IAAM,2BAIT;AAAA,EACF,aAAa,mDAA8B;AAAA,EAC3C,gBAAgB;AAAA,EAChB,WAAW;AAAA,IACT,4BAA4B;AAAA,EAC9B;AACF;AA0BA,eAAe,gCACb,KACA,KACA,OACA,KACA,EAAE,2BAA2B,GACd;AACf,QAAM,EAAE,OAAO,IAAI;AAEnB,QAAM,QAAQ,SAAS,CAAC;AAExB,MAAI,CAAC,OAAO;AACV,WAAO,IAAI,cAAc,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,EACtD;AAIA,QAAM,iBAAiB,OAAO,KAAK,KAAK;AAExC,MAAI,CAAC,gBAAgB,cAAc,GAAG;AACpC,WAAO,IAAI,cAAc,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,EACtD;AAEA,6BAA2B,cAAc;AAEzC,MAAI,SAAS;AAEb,SAAO,IAAI;AACb;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkFYADAA2Gjs = require('./chunk-FYADAA2G.js');
|
|
4
4
|
|
|
5
5
|
// src/rpc-methods/requestPermissions.ts
|
|
6
6
|
var _controllerutils = require('@metamask/controller-utils');
|
|
7
7
|
var requestPermissionsHandler = {
|
|
8
|
-
methodNames: ["wallet_requestPermissions" /*
|
|
8
|
+
methodNames: ["wallet_requestPermissions" /* RequestPermissions */],
|
|
9
9
|
implementation: requestPermissionsImplementation,
|
|
10
10
|
hookNames: {
|
|
11
11
|
requestPermissionsForOrigin: true
|
|
@@ -14,7 +14,7 @@ var requestPermissionsHandler = {
|
|
|
14
14
|
async function requestPermissionsImplementation(req, res, _next, end, { requestPermissionsForOrigin }) {
|
|
15
15
|
const { params } = req;
|
|
16
16
|
if (!Array.isArray(params) || !_controllerutils.isPlainObject.call(void 0, params[0])) {
|
|
17
|
-
return end(
|
|
17
|
+
return end(_chunkFYADAA2Gjs.invalidParams.call(void 0, { data: { request: req } }));
|
|
18
18
|
}
|
|
19
19
|
const [requestedPermissions] = params;
|
|
20
20
|
const [grantedPermissions] = await requestPermissionsForOrigin(
|
|
@@ -27,4 +27,4 @@ async function requestPermissionsImplementation(req, res, _next, end, { requestP
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
exports.requestPermissionsHandler = requestPermissionsHandler;
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
30
|
+
//# sourceMappingURL=chunk-7A3VYLCK.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rpc-methods/requestPermissions.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,qBAAqB;AASvB,IAAM,4BAIT;AAAA,EACF,aAAa,qDAA+B;AAAA,EAC5C,gBAAgB;AAAA,EAChB,WAAW;AAAA,IACT,6BAA6B;AAAA,EAC/B;AACF;AAuBA,eAAe,iCACb,KACA,KACA,OACA,KACA,EAAE,4BAA4B,GACf;AACf,QAAM,EAAE,OAAO,IAAI;AAEnB,MAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,cAAc,OAAO,CAAC,CAAC,GAAG;AACvD,WAAO,IAAI,cAAc,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,EACtD;AAEA,QAAM,CAAC,oBAAoB,IAAI;AAC/B,QAAM,CAAC,kBAAkB,IAAI,MAAM;AAAA,IACjC;AAAA,EACF;AAGA,MAAI,SAAS,OAAO,OAAO,kBAAkB;AAC7C,SAAO,IAAI;AACb","sourcesContent":["import { isPlainObject } from '@metamask/controller-utils';\nimport type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { invalidParams } from '../errors';\nimport type { PermissionConstraint, RequestedPermissions } from '../Permission';\nimport type { PermittedHandlerExport } from '../utils';\nimport { MethodNames } from '../utils';\n\nexport const requestPermissionsHandler: PermittedHandlerExport<\n RequestPermissionsHooks,\n [RequestedPermissions],\n PermissionConstraint[]\n> = {\n methodNames: [MethodNames.
|
|
1
|
+
{"version":3,"sources":["../src/rpc-methods/requestPermissions.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,qBAAqB;AASvB,IAAM,4BAIT;AAAA,EACF,aAAa,qDAA+B;AAAA,EAC5C,gBAAgB;AAAA,EAChB,WAAW;AAAA,IACT,6BAA6B;AAAA,EAC/B;AACF;AAuBA,eAAe,iCACb,KACA,KACA,OACA,KACA,EAAE,4BAA4B,GACf;AACf,QAAM,EAAE,OAAO,IAAI;AAEnB,MAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,cAAc,OAAO,CAAC,CAAC,GAAG;AACvD,WAAO,IAAI,cAAc,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;AAAA,EACtD;AAEA,QAAM,CAAC,oBAAoB,IAAI;AAC/B,QAAM,CAAC,kBAAkB,IAAI,MAAM;AAAA,IACjC;AAAA,EACF;AAGA,MAAI,SAAS,OAAO,OAAO,kBAAkB;AAC7C,SAAO,IAAI;AACb","sourcesContent":["import { isPlainObject } from '@metamask/controller-utils';\nimport type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport type { JsonRpcRequest, PendingJsonRpcResponse } from '@metamask/utils';\n\nimport { invalidParams } from '../errors';\nimport type { PermissionConstraint, RequestedPermissions } from '../Permission';\nimport type { PermittedHandlerExport } from '../utils';\nimport { MethodNames } from '../utils';\n\nexport const requestPermissionsHandler: PermittedHandlerExport<\n RequestPermissionsHooks,\n [RequestedPermissions],\n PermissionConstraint[]\n> = {\n methodNames: [MethodNames.RequestPermissions],\n implementation: requestPermissionsImplementation,\n hookNames: {\n requestPermissionsForOrigin: true,\n },\n};\n\ntype RequestPermissions = (\n requestedPermissions: RequestedPermissions,\n) => Promise<\n [Record<string, PermissionConstraint>, { id: string; origin: string }]\n>;\n\nexport type RequestPermissionsHooks = {\n requestPermissionsForOrigin: RequestPermissions;\n};\n\n/**\n * Request Permissions implementation to be used in JsonRpcEngine middleware.\n *\n * @param req - The JsonRpcEngine request\n * @param res - The JsonRpcEngine result object\n * @param _next - JsonRpcEngine next() callback - unused\n * @param end - JsonRpcEngine end() callback\n * @param options - Method hooks passed to the method implementation\n * @param options.requestPermissionsForOrigin - The specific method hook needed for this method implementation\n * @returns A promise that resolves to nothing\n */\nasync function requestPermissionsImplementation(\n req: JsonRpcRequest<[RequestedPermissions]>,\n res: PendingJsonRpcResponse<PermissionConstraint[]>,\n _next: unknown,\n end: JsonRpcEngineEndCallback,\n { requestPermissionsForOrigin }: RequestPermissionsHooks,\n): Promise<void> {\n const { params } = req;\n\n if (!Array.isArray(params) || !isPlainObject(params[0])) {\n return end(invalidParams({ data: { request: req } }));\n }\n\n const [requestedPermissions] = params;\n const [grantedPermissions] = await requestPermissionsForOrigin(\n requestedPermissions,\n );\n\n // `wallet_requestPermission` is specified to return an array.\n res.result = Object.values(grantedPermissions);\n return end();\n}\n"]}
|