@metamask/permission-controller 9.0.1 → 9.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 +20 -4
- package/dist/Caveat.js +5 -5
- package/dist/Caveat.mjs +4 -4
- package/dist/Permission.js +3 -3
- package/dist/Permission.mjs +2 -2
- package/dist/PermissionController.js +8 -8
- package/dist/PermissionController.mjs +7 -7
- package/dist/SubjectMetadataController.js +3 -3
- package/dist/SubjectMetadataController.mjs +2 -2
- package/dist/chunk-2L4QPE5A.mjs +25 -0
- package/dist/chunk-3R56AY2L.mjs +35 -0
- package/dist/chunk-3R56AY2L.mjs.map +1 -0
- package/dist/{chunk-U5LTEXSU.js → chunk-3X6WO7UG.js} +28 -2
- package/dist/chunk-3X6WO7UG.js.map +1 -0
- package/dist/{chunk-CXKOMB77.mjs → chunk-4B6NOD2D.mjs} +401 -115
- package/dist/chunk-4B6NOD2D.mjs.map +1 -0
- package/dist/{chunk-FEXS6SJF.mjs → chunk-AZUM6CBY.mjs} +27 -1
- package/dist/chunk-AZUM6CBY.mjs.map +1 -0
- package/dist/{chunk-SFKE5HHK.js → chunk-C73QV75D.js} +1 -4
- package/dist/chunk-C73QV75D.js.map +1 -0
- package/dist/{chunk-YVXIWLBE.mjs → chunk-DUZPZORW.mjs} +2 -2
- package/dist/{chunk-7CTPRFQ3.js → chunk-DV74ZDGD.js} +7 -7
- package/dist/{chunk-ZVO26XPN.js → chunk-GHOOCGN3.js} +4 -4
- package/dist/chunk-GHOOCGN3.js.map +1 -0
- package/dist/{chunk-ODCVB4BB.mjs → chunk-HYMS7IGB.mjs} +1 -1
- package/dist/chunk-HYMS7IGB.mjs.map +1 -0
- package/dist/{chunk-5L2IOZE2.js → chunk-I3DJ23QH.js} +449 -163
- package/dist/chunk-I3DJ23QH.js.map +1 -0
- package/dist/chunk-PTE4672I.js +35 -0
- package/dist/chunk-PTE4672I.js.map +1 -0
- package/dist/{chunk-XBFHEZRU.mjs → chunk-RJKSCKTD.mjs} +2 -2
- package/dist/chunk-RJKSCKTD.mjs.map +1 -0
- package/dist/{chunk-EGNDXGRG.js → chunk-RKDXFKNN.js} +4 -4
- package/dist/chunk-RKDXFKNN.js.map +1 -0
- package/dist/{chunk-N4KQ2BHF.mjs → chunk-RXC2KFRK.mjs} +2 -2
- package/dist/{chunk-5C5SZO74.mjs → chunk-TBOKQ5NP.mjs} +4 -4
- package/dist/{chunk-AQ35E2HU.js → chunk-VM4LI55W.js} +3 -3
- package/dist/{chunk-4D2RVWNF.mjs → chunk-W4CPVA4J.mjs} +1 -4
- package/dist/chunk-W4CPVA4J.mjs.map +1 -0
- package/dist/{chunk-YRNH4R3G.js → chunk-XM622CMP.js} +3 -3
- package/dist/{chunk-BEQEQLRE.mjs → chunk-Y6GRGXOL.mjs} +2 -2
- package/dist/chunk-Y6GRGXOL.mjs.map +1 -0
- package/dist/chunk-Z2XKIXLS.js +25 -0
- package/dist/{chunk-6CID6TBW.js → chunk-ZH4MLSXX.js} +1 -1
- package/dist/chunk-ZH4MLSXX.js.map +1 -0
- package/dist/errors.js +9 -3
- package/dist/errors.mjs +8 -2
- package/dist/index.js +18 -12
- package/dist/index.mjs +17 -11
- package/dist/permission-middleware.js +4 -4
- package/dist/permission-middleware.mjs +3 -3
- package/dist/rpc-methods/getPermissions.js +2 -2
- 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 +5 -5
- package/dist/rpc-methods/requestPermissions.mjs +4 -4
- package/dist/rpc-methods/revokePermissions.js +5 -5
- package/dist/rpc-methods/revokePermissions.mjs +4 -4
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/Caveat.d.ts +45 -18
- package/dist/types/Caveat.d.ts.map +1 -1
- package/dist/types/Permission.d.ts +39 -39
- package/dist/types/Permission.d.ts.map +1 -1
- package/dist/types/PermissionController.d.ts +152 -56
- package/dist/types/PermissionController.d.ts.map +1 -1
- package/dist/types/SubjectMetadataController.d.ts +13 -13
- package/dist/types/SubjectMetadataController.d.ts.map +1 -1
- package/dist/types/errors.d.ts +21 -2
- package/dist/types/errors.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/permission-middleware.d.ts +1 -1
- package/dist/types/permission-middleware.d.ts.map +1 -1
- package/dist/types/rpc-methods/getPermissions.d.ts +1 -1
- package/dist/types/rpc-methods/getPermissions.d.ts.map +1 -1
- package/dist/types/rpc-methods/index.d.ts +2 -4
- package/dist/types/rpc-methods/index.d.ts.map +1 -1
- package/dist/types/rpc-methods/requestPermissions.d.ts +2 -2
- package/dist/types/rpc-methods/requestPermissions.d.ts.map +1 -1
- package/dist/types/rpc-methods/revokePermissions.d.ts +3 -3
- package/dist/types/rpc-methods/revokePermissions.d.ts.map +1 -1
- package/dist/types/utils.d.ts +23 -6
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/utils.js +5 -3
- package/dist/utils.mjs +6 -4
- package/package.json +6 -6
- package/dist/chunk-4D2RVWNF.mjs.map +0 -1
- package/dist/chunk-5L2IOZE2.js.map +0 -1
- package/dist/chunk-6CID6TBW.js.map +0 -1
- package/dist/chunk-BEQEQLRE.mjs.map +0 -1
- package/dist/chunk-CSAU5B4Q.js +0 -10
- package/dist/chunk-CXKOMB77.mjs.map +0 -1
- package/dist/chunk-EGNDXGRG.js.map +0 -1
- package/dist/chunk-FEXS6SJF.mjs.map +0 -1
- package/dist/chunk-K5R57Y57.js +0 -12
- package/dist/chunk-K5R57Y57.js.map +0 -1
- package/dist/chunk-KVKKNDYV.mjs +0 -12
- package/dist/chunk-KVKKNDYV.mjs.map +0 -1
- package/dist/chunk-ODCVB4BB.mjs.map +0 -1
- package/dist/chunk-SFKE5HHK.js.map +0 -1
- package/dist/chunk-U5LTEXSU.js.map +0 -1
- package/dist/chunk-XBFHEZRU.mjs.map +0 -1
- package/dist/chunk-ZSTKOCBT.mjs +0 -10
- package/dist/chunk-ZVO26XPN.js.map +0 -1
- /package/dist/{chunk-ZSTKOCBT.mjs.map → chunk-2L4QPE5A.mjs.map} +0 -0
- /package/dist/{chunk-YVXIWLBE.mjs.map → chunk-DUZPZORW.mjs.map} +0 -0
- /package/dist/{chunk-7CTPRFQ3.js.map → chunk-DV74ZDGD.js.map} +0 -0
- /package/dist/{chunk-N4KQ2BHF.mjs.map → chunk-RXC2KFRK.mjs.map} +0 -0
- /package/dist/{chunk-5C5SZO74.mjs.map → chunk-TBOKQ5NP.mjs.map} +0 -0
- /package/dist/{chunk-AQ35E2HU.js.map → chunk-VM4LI55W.js.map} +0 -0
- /package/dist/{chunk-YRNH4R3G.js.map → chunk-XM622CMP.js.map} +0 -0
- /package/dist/{chunk-CSAU5B4Q.js.map → chunk-Z2XKIXLS.js.map} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [9.1.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add `requestPermissionsIncremental()` and caveat merger functions ([#4222](https://github.com/MetaMask/core/pull/4222))
|
|
15
|
+
- Enable passing additional metadata during permission requests ([#4179](https://github.com/MetaMask/core/pull/4179))
|
|
16
|
+
- Make permission request validation errors more informative ([#4172](https://github.com/MetaMask/core/pull/4172))
|
|
17
|
+
|
|
18
|
+
## [9.0.2]
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- Fix `SideEffectMessenger` type not respecting generic parameter types ([#4059](https://github.com/MetaMask/core/pull/4059))
|
|
23
|
+
|
|
10
24
|
## [9.0.1]
|
|
11
25
|
|
|
12
26
|
### Fixed
|
|
@@ -97,9 +111,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
97
111
|
|
|
98
112
|
### Changed
|
|
99
113
|
|
|
100
|
-
- **BREAKING:** Remove `undefined` from RestrictedMethodParameters type union and from type parameter for RestrictedMethodOptions ([#1749]
|
|
101
|
-
- **BREAKING:** Update from `json-rpc-engine@^6.1.0` to `@metamask/json-rpc-engine@^7.1.1` ([#1749]
|
|
102
|
-
- Update from `eth-rpc-errors@^4.0.2` to `@metamask/rpc-errors@^6.0.0` ([#1749]
|
|
114
|
+
- **BREAKING:** Remove `undefined` from RestrictedMethodParameters type union and from type parameter for RestrictedMethodOptions ([#1749](https://github.com/MetaMask/core/pull/1749))
|
|
115
|
+
- **BREAKING:** Update from `json-rpc-engine@^6.1.0` to `@metamask/json-rpc-engine@^7.1.1` ([#1749](https://github.com/MetaMask/core/pull/1749))
|
|
116
|
+
- Update from `eth-rpc-errors@^4.0.2` to `@metamask/rpc-errors@^6.0.0` ([#1749](https://github.com/MetaMask/core/pull/1749))
|
|
103
117
|
- Bump dependency on `@metamask/utils` to ^8.1.0 ([#1639](https://github.com/MetaMask/core/pull/1639))
|
|
104
118
|
- Bump dependency and peer dependency on `@metamask/approval-controller` to ^4.0.0
|
|
105
119
|
- Bump dependency on `@metamask/base-controller` to ^3.2.3
|
|
@@ -212,7 +226,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
212
226
|
|
|
213
227
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
214
228
|
|
|
215
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@9.0
|
|
229
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@9.1.0...HEAD
|
|
230
|
+
[9.1.0]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@9.0.2...@metamask/permission-controller@9.1.0
|
|
231
|
+
[9.0.2]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@9.0.1...@metamask/permission-controller@9.0.2
|
|
216
232
|
[9.0.1]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@9.0.0...@metamask/permission-controller@9.0.1
|
|
217
233
|
[9.0.0]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@8.0.1...@metamask/permission-controller@9.0.0
|
|
218
234
|
[8.0.1]: https://github.com/MetaMask/core/compare/@metamask/permission-controller@8.0.0...@metamask/permission-controller@8.0.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
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
7
|
-
require('./chunk-
|
|
4
|
+
var _chunkRKDXFKNNjs = require('./chunk-RKDXFKNN.js');
|
|
5
|
+
require('./chunk-ZH4MLSXX.js');
|
|
6
|
+
require('./chunk-3X6WO7UG.js');
|
|
7
|
+
require('./chunk-Z2XKIXLS.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
exports.decorateWithCaveats =
|
|
11
|
+
exports.decorateWithCaveats = _chunkRKDXFKNNjs.decorateWithCaveats; exports.isRestrictedMethodCaveatSpecification = _chunkRKDXFKNNjs.isRestrictedMethodCaveatSpecification;
|
|
12
12
|
//# sourceMappingURL=Caveat.js.map
|
package/dist/Caveat.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
decorateWithCaveats,
|
|
3
3
|
isRestrictedMethodCaveatSpecification
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-RJKSCKTD.mjs";
|
|
5
|
+
import "./chunk-HYMS7IGB.mjs";
|
|
6
|
+
import "./chunk-AZUM6CBY.mjs";
|
|
7
|
+
import "./chunk-2L4QPE5A.mjs";
|
|
8
8
|
export {
|
|
9
9
|
decorateWithCaveats,
|
|
10
10
|
isRestrictedMethodCaveatSpecification
|
package/dist/Permission.js
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
7
|
-
require('./chunk-
|
|
6
|
+
var _chunkZH4MLSXXjs = require('./chunk-ZH4MLSXX.js');
|
|
7
|
+
require('./chunk-Z2XKIXLS.js');
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
exports.PermissionType =
|
|
13
|
+
exports.PermissionType = _chunkZH4MLSXXjs.PermissionType; exports.constructPermission = _chunkZH4MLSXXjs.constructPermission; exports.findCaveat = _chunkZH4MLSXXjs.findCaveat; exports.hasSpecificationType = _chunkZH4MLSXXjs.hasSpecificationType;
|
|
14
14
|
//# sourceMappingURL=Permission.js.map
|
package/dist/Permission.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
6
|
-
require('./chunk-
|
|
7
|
-
require('./chunk-
|
|
8
|
-
require('./chunk-
|
|
9
|
-
require('./chunk-
|
|
10
|
-
require('./chunk-
|
|
4
|
+
var _chunkI3DJ23QHjs = require('./chunk-I3DJ23QH.js');
|
|
5
|
+
require('./chunk-RKDXFKNN.js');
|
|
6
|
+
require('./chunk-ZH4MLSXX.js');
|
|
7
|
+
require('./chunk-VM4LI55W.js');
|
|
8
|
+
require('./chunk-3X6WO7UG.js');
|
|
9
|
+
require('./chunk-PTE4672I.js');
|
|
10
|
+
require('./chunk-Z2XKIXLS.js');
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
exports.CaveatMutatorOperation =
|
|
14
|
+
exports.CaveatMutatorOperation = _chunkI3DJ23QHjs.CaveatMutatorOperation; exports.PermissionController = _chunkI3DJ23QHjs.PermissionController;
|
|
15
15
|
//# sourceMappingURL=PermissionController.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CaveatMutatorOperation,
|
|
3
3
|
PermissionController
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-4B6NOD2D.mjs";
|
|
5
|
+
import "./chunk-RJKSCKTD.mjs";
|
|
6
|
+
import "./chunk-HYMS7IGB.mjs";
|
|
7
|
+
import "./chunk-RXC2KFRK.mjs";
|
|
8
|
+
import "./chunk-AZUM6CBY.mjs";
|
|
9
|
+
import "./chunk-3R56AY2L.mjs";
|
|
10
|
+
import "./chunk-2L4QPE5A.mjs";
|
|
11
11
|
export {
|
|
12
12
|
CaveatMutatorOperation,
|
|
13
13
|
PermissionController
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('./chunk-
|
|
4
|
+
var _chunkC73QV75Djs = require('./chunk-C73QV75D.js');
|
|
5
|
+
require('./chunk-Z2XKIXLS.js');
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
exports.SubjectMetadataController =
|
|
9
|
+
exports.SubjectMetadataController = _chunkC73QV75Djs.SubjectMetadataController; exports.SubjectType = _chunkC73QV75Djs.SubjectType;
|
|
10
10
|
//# sourceMappingURL=SubjectMetadataController.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
var __accessCheck = (obj, member, msg) => {
|
|
7
|
+
if (!member.has(obj))
|
|
8
|
+
throw TypeError("Cannot " + msg);
|
|
9
|
+
};
|
|
10
|
+
var __privateAdd = (obj, member, value) => {
|
|
11
|
+
if (member.has(obj))
|
|
12
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
13
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
14
|
+
};
|
|
15
|
+
var __privateMethod = (obj, member, method) => {
|
|
16
|
+
__accessCheck(obj, member, "access private method");
|
|
17
|
+
return method;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export {
|
|
21
|
+
__export,
|
|
22
|
+
__privateAdd,
|
|
23
|
+
__privateMethod
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-2L4QPE5A.mjs.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/utils.ts
|
|
2
|
+
var MethodNames = /* @__PURE__ */ ((MethodNames2) => {
|
|
3
|
+
MethodNames2["requestPermissions"] = "wallet_requestPermissions";
|
|
4
|
+
MethodNames2["getPermissions"] = "wallet_getPermissions";
|
|
5
|
+
MethodNames2["revokePermissions"] = "wallet_revokePermissions";
|
|
6
|
+
return MethodNames2;
|
|
7
|
+
})(MethodNames || {});
|
|
8
|
+
function collectUniqueAndPairedCaveats(leftPermission, rightPermission) {
|
|
9
|
+
const leftCaveats = leftPermission?.caveats?.slice() ?? [];
|
|
10
|
+
const rightCaveats = rightPermission.caveats?.slice() ?? [];
|
|
11
|
+
const leftUniqueCaveats = [];
|
|
12
|
+
const caveatPairs = [];
|
|
13
|
+
leftCaveats.forEach((leftCaveat) => {
|
|
14
|
+
const rightCaveatIndex = rightCaveats.findIndex(
|
|
15
|
+
(rightCaveat) => rightCaveat.type === leftCaveat.type
|
|
16
|
+
);
|
|
17
|
+
if (rightCaveatIndex === -1) {
|
|
18
|
+
leftUniqueCaveats.push(leftCaveat);
|
|
19
|
+
} else {
|
|
20
|
+
caveatPairs.push([leftCaveat, rightCaveats[rightCaveatIndex]]);
|
|
21
|
+
rightCaveats.splice(rightCaveatIndex, 1);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
caveatPairs,
|
|
26
|
+
leftUniqueCaveats,
|
|
27
|
+
rightUniqueCaveats: [...rightCaveats]
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
MethodNames,
|
|
33
|
+
collectUniqueAndPairedCaveats
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=chunk-3R56AY2L.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 T,\n U extends JsonRpcParams,\n V extends Json,\n> = (\n req: JsonRpcRequest<U>,\n res: PendingJsonRpcResponse<V>,\n next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n hooks: T,\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<T> = {\n [Property in keyof T]: true;\n};\n\n/**\n * A handler for a permitted method.\n */\nexport type PermittedHandlerExport<\n T,\n U extends JsonRpcParams,\n V extends Json,\n> = {\n implementation: HandlerMiddlewareFunction<T, U, V>;\n hookNames: HookNames<T>;\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"]}
|
|
@@ -43,6 +43,21 @@ var UnrecognizedSubjectError = class extends Error {
|
|
|
43
43
|
super(`Unrecognized subject: "${origin}" has no permissions.`);
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
+
var CaveatMergerDoesNotExistError = class extends Error {
|
|
47
|
+
constructor(caveatType) {
|
|
48
|
+
super(`Caveat value merger does not exist for type: "${caveatType}"`);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var InvalidMergedPermissionsError = class extends Error {
|
|
52
|
+
constructor(origin, cause, diff) {
|
|
53
|
+
super(
|
|
54
|
+
`Invalid merged permissions for subject "${origin}":
|
|
55
|
+
${cause.message}`
|
|
56
|
+
);
|
|
57
|
+
this.cause = cause;
|
|
58
|
+
this.data = { diff };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
46
61
|
var InvalidApprovedPermissionError = class extends Error {
|
|
47
62
|
constructor(origin, target, approvedPermission) {
|
|
48
63
|
super(
|
|
@@ -150,6 +165,14 @@ var DuplicateCaveatError = class extends Error {
|
|
|
150
165
|
this.data = { caveatType, origin, target: targetName };
|
|
151
166
|
}
|
|
152
167
|
};
|
|
168
|
+
var CaveatMergeTypeMismatchError = class extends Error {
|
|
169
|
+
constructor(leftCaveatType, rightCaveatType) {
|
|
170
|
+
super(
|
|
171
|
+
`Cannot merge caveats of different types: "${leftCaveatType}" and "${rightCaveatType}".`
|
|
172
|
+
);
|
|
173
|
+
this.data = { leftCaveatType, rightCaveatType };
|
|
174
|
+
}
|
|
175
|
+
};
|
|
153
176
|
var CaveatSpecificationMismatchError = class extends Error {
|
|
154
177
|
constructor(caveatSpec, permissionType) {
|
|
155
178
|
super(
|
|
@@ -188,5 +211,8 @@ var PermissionsRequestNotFoundError = class extends Error {
|
|
|
188
211
|
|
|
189
212
|
|
|
190
213
|
|
|
191
|
-
|
|
192
|
-
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
exports.unauthorized = unauthorized; exports.methodNotFound = methodNotFound; exports.invalidParams = invalidParams; exports.userRejectedRequest = userRejectedRequest; exports.internalError = internalError; exports.InvalidSubjectIdentifierError = InvalidSubjectIdentifierError; exports.UnrecognizedSubjectError = UnrecognizedSubjectError; exports.CaveatMergerDoesNotExistError = CaveatMergerDoesNotExistError; exports.InvalidMergedPermissionsError = InvalidMergedPermissionsError; exports.InvalidApprovedPermissionError = InvalidApprovedPermissionError; exports.PermissionDoesNotExistError = PermissionDoesNotExistError; exports.EndowmentPermissionDoesNotExistError = EndowmentPermissionDoesNotExistError; exports.UnrecognizedCaveatTypeError = UnrecognizedCaveatTypeError; exports.InvalidCaveatsPropertyError = InvalidCaveatsPropertyError; exports.CaveatDoesNotExistError = CaveatDoesNotExistError; exports.CaveatAlreadyExistsError = CaveatAlreadyExistsError; exports.InvalidCaveatError = InvalidCaveatError; exports.InvalidCaveatTypeError = InvalidCaveatTypeError; exports.CaveatMissingValueError = CaveatMissingValueError; exports.CaveatInvalidJsonError = CaveatInvalidJsonError; exports.InvalidCaveatFieldsError = InvalidCaveatFieldsError; exports.ForbiddenCaveatError = ForbiddenCaveatError; exports.DuplicateCaveatError = DuplicateCaveatError; exports.CaveatMergeTypeMismatchError = CaveatMergeTypeMismatchError; exports.CaveatSpecificationMismatchError = CaveatSpecificationMismatchError; exports.PermissionsRequestNotFoundError = PermissionsRequestNotFoundError;
|
|
218
|
+
//# sourceMappingURL=chunk-3X6WO7UG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts"],"names":[],"mappings":"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","sourcesContent":["import type { DataWithOptionalCause } from '@metamask/rpc-errors';\nimport {\n errorCodes,\n providerErrors,\n rpcErrors,\n JsonRpcError,\n} from '@metamask/rpc-errors';\n\nimport type { CaveatConstraint } from './Caveat';\nimport type { PermissionType } from './Permission';\nimport type { PermissionDiffMap } from './PermissionController';\n\ntype UnauthorizedArg = {\n data?: Record<string, unknown>;\n message?: string;\n};\n\n/**\n * Utility function for building an \"unauthorized\" error.\n *\n * @param opts - Optional arguments that add extra context\n * @returns The built error\n */\nexport function unauthorized(opts: UnauthorizedArg) {\n return providerErrors.unauthorized({\n message:\n 'Unauthorized to perform action. Try requesting the required permission(s) first. For more information, see: https://docs.metamask.io/guide/rpc-api.html#permissions',\n data: opts.data,\n });\n}\n\n/**\n * Utility function for building a \"method not found\" error.\n *\n * @param method - The method in question.\n * @param data - Optional data for context.\n * @returns The built error\n */\nexport function methodNotFound(method: string, data?: DataWithOptionalCause) {\n const message = `The method \"${method}\" does not exist / is not available.`;\n\n const opts: Parameters<typeof rpcErrors.methodNotFound>[0] = { message };\n if (data !== undefined) {\n opts.data = data;\n }\n return rpcErrors.methodNotFound(opts);\n}\n\ntype InvalidParamsArg = {\n message?: string;\n data?: DataWithOptionalCause;\n};\n\n/**\n * Utility function for building an \"invalid params\" error.\n *\n * @param opts - Optional arguments that add extra context\n * @returns The built error\n */\nexport function invalidParams(opts: InvalidParamsArg) {\n return rpcErrors.invalidParams({\n data: opts.data,\n message: opts.message,\n });\n}\n\n/**\n * Utility function for building an \"user rejected request\" error.\n *\n * @param data - Optional data to add extra context\n * @returns The built error\n */\nexport function userRejectedRequest<Data extends Record<string, unknown>>(\n data?: Data,\n): JsonRpcError<Data> {\n return providerErrors.userRejectedRequest({ data });\n}\n\n/**\n * Utility function for building an internal error.\n *\n * @param message - The error message\n * @param data - Optional data to add extra context\n * @returns The built error\n */\nexport function internalError<Data extends Record<string, unknown>>(\n message: string,\n data?: Data,\n): JsonRpcError<Data> {\n return rpcErrors.internal({ message, data });\n}\n\nexport class InvalidSubjectIdentifierError extends Error {\n constructor(origin: unknown) {\n super(\n `Invalid subject identifier: \"${\n typeof origin === 'string' ? origin : typeof origin\n }\"`,\n );\n }\n}\n\nexport class UnrecognizedSubjectError extends Error {\n constructor(origin: string) {\n super(`Unrecognized subject: \"${origin}\" has no permissions.`);\n }\n}\n\nexport class CaveatMergerDoesNotExistError extends Error {\n constructor(caveatType: string) {\n super(`Caveat value merger does not exist for type: \"${caveatType}\"`);\n }\n}\n\nexport class InvalidMergedPermissionsError extends Error {\n public cause: Error;\n\n public data: {\n diff: PermissionDiffMap<string, CaveatConstraint>;\n };\n\n constructor(\n origin: string,\n cause: Error,\n diff: PermissionDiffMap<string, CaveatConstraint>,\n ) {\n super(\n `Invalid merged permissions for subject \"${origin}\":\\n${cause.message}`,\n );\n this.cause = cause;\n this.data = { diff };\n }\n}\n\nexport class InvalidApprovedPermissionError extends Error {\n public data: {\n origin: string;\n target: string;\n approvedPermission: Record<string, unknown>;\n };\n\n constructor(\n origin: string,\n target: string,\n approvedPermission: Record<string, unknown>,\n ) {\n super(\n `Invalid approved permission for origin \"${origin}\" and target \"${target}\".`,\n );\n this.data = { origin, target, approvedPermission };\n }\n}\nexport class PermissionDoesNotExistError extends Error {\n constructor(origin: string, target: string) {\n super(`Subject \"${origin}\" has no permission for \"${target}\".`);\n }\n}\n\nexport class EndowmentPermissionDoesNotExistError extends Error {\n public data?: { origin: string };\n\n constructor(target: string, origin?: string) {\n super(`Subject \"${origin}\" has no permission for \"${target}\".`);\n if (origin) {\n this.data = { origin };\n }\n }\n}\n\nexport class UnrecognizedCaveatTypeError extends Error {\n public data: {\n caveatType: string;\n origin?: string;\n target?: string;\n };\n\n constructor(caveatType: string);\n\n constructor(caveatType: string, origin: string, target: string);\n\n constructor(caveatType: string, origin?: string, target?: string) {\n super(`Unrecognized caveat type: \"${caveatType}\"`);\n this.data = { caveatType };\n if (origin !== undefined) {\n this.data.origin = origin;\n }\n\n if (target !== undefined) {\n this.data.target = target;\n }\n }\n}\n\nexport class InvalidCaveatsPropertyError extends Error {\n public data: { origin: string; target: string; caveatsProperty: unknown };\n\n constructor(origin: string, target: string, caveatsProperty: unknown) {\n super(\n `The \"caveats\" property of permission for \"${target}\" of subject \"${origin}\" is invalid. It must be a non-empty array if specified.`,\n );\n this.data = { origin, target, caveatsProperty };\n }\n}\n\nexport class CaveatDoesNotExistError extends Error {\n constructor(origin: string, target: string, caveatType: string) {\n super(\n `Permission for \"${target}\" of subject \"${origin}\" has no caveat of type \"${caveatType}\".`,\n );\n }\n}\n\nexport class CaveatAlreadyExistsError extends Error {\n constructor(origin: string, target: string, caveatType: string) {\n super(\n `Permission for \"${target}\" of subject \"${origin}\" already has a caveat of type \"${caveatType}\".`,\n );\n }\n}\n\nexport class InvalidCaveatError extends JsonRpcError<\n DataWithOptionalCause | undefined\n> {\n public override data: { origin: string; target: string };\n\n constructor(receivedCaveat: unknown, origin: string, target: string) {\n super(\n errorCodes.rpc.invalidParams,\n `Invalid caveat. Caveats must be plain objects.`,\n { receivedCaveat },\n );\n this.data = { origin, target };\n }\n}\n\nexport class InvalidCaveatTypeError extends Error {\n public data: {\n caveat: Record<string, unknown>;\n origin: string;\n target: string;\n };\n\n constructor(caveat: Record<string, unknown>, origin: string, target: string) {\n super(`Caveat types must be strings. Received: \"${typeof caveat.type}\"`);\n this.data = { caveat, origin, target };\n }\n}\n\nexport class CaveatMissingValueError extends Error {\n public data: {\n caveat: Record<string, unknown>;\n origin: string;\n target: string;\n };\n\n constructor(caveat: Record<string, unknown>, origin: string, target: string) {\n super(`Caveat is missing \"value\" field.`);\n this.data = { caveat, origin, target };\n }\n}\n\nexport class CaveatInvalidJsonError extends Error {\n public data: {\n caveat: Record<string, unknown>;\n origin: string;\n target: string;\n };\n\n constructor(caveat: Record<string, unknown>, origin: string, target: string) {\n super(`Caveat \"value\" is invalid JSON.`);\n this.data = { caveat, origin, target };\n }\n}\n\nexport class InvalidCaveatFieldsError extends Error {\n public data: {\n caveat: Record<string, unknown>;\n origin: string;\n target: string;\n };\n\n constructor(caveat: Record<string, unknown>, origin: string, target: string) {\n super(\n `Caveat has unexpected number of fields: \"${Object.keys(caveat).length}\"`,\n );\n this.data = { caveat, origin, target };\n }\n}\n\nexport class ForbiddenCaveatError extends Error {\n public data: {\n caveatType: string;\n origin: string;\n target: string;\n };\n\n constructor(caveatType: string, origin: string, targetName: string) {\n super(\n `Permissions for target \"${targetName}\" may not have caveats of type \"${caveatType}\".`,\n );\n this.data = { caveatType, origin, target: targetName };\n }\n}\n\nexport class DuplicateCaveatError extends Error {\n public data: {\n caveatType: string;\n origin: string;\n target: string;\n };\n\n constructor(caveatType: string, origin: string, targetName: string) {\n super(\n `Permissions for target \"${targetName}\" contains multiple caveats of type \"${caveatType}\".`,\n );\n this.data = { caveatType, origin, target: targetName };\n }\n}\n\nexport class CaveatMergeTypeMismatchError extends Error {\n public data: {\n leftCaveatType: string;\n rightCaveatType: string;\n };\n\n constructor(leftCaveatType: string, rightCaveatType: string) {\n super(\n `Cannot merge caveats of different types: \"${leftCaveatType}\" and \"${rightCaveatType}\".`,\n );\n this.data = { leftCaveatType, rightCaveatType };\n }\n}\n\nexport class CaveatSpecificationMismatchError extends Error {\n public data: {\n caveatSpec: Record<string, unknown>;\n permissionType: PermissionType;\n };\n\n constructor(\n caveatSpec: Record<string, unknown>,\n permissionType: PermissionType,\n ) {\n super(\n `Caveat specification uses a mismatched type. Expected caveats for ${permissionType}`,\n );\n this.data = { caveatSpec, permissionType };\n }\n}\n\nexport class PermissionsRequestNotFoundError extends Error {\n constructor(id: string) {\n super(`Permissions request with id \"${id}\" not found.`);\n }\n}\n"]}
|