@metamask-previews/permission-controller 12.3.0-preview-45a82ea8e → 12.3.0-preview-d8ff44d

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.
Files changed (48) hide show
  1. package/CHANGELOG.md +1 -3
  2. package/dist/index.cjs +14 -1
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +2 -1
  5. package/dist/index.d.cts.map +1 -1
  6. package/dist/index.d.mts +2 -1
  7. package/dist/index.d.mts.map +1 -1
  8. package/dist/index.mjs +1 -0
  9. package/dist/index.mjs.map +1 -1
  10. package/dist/rpc-methods/getPermissions.cjs +27 -0
  11. package/dist/rpc-methods/getPermissions.cjs.map +1 -0
  12. package/dist/rpc-methods/getPermissions.d.cts +9 -0
  13. package/dist/rpc-methods/getPermissions.d.cts.map +1 -0
  14. package/dist/rpc-methods/getPermissions.d.mts +9 -0
  15. package/dist/rpc-methods/getPermissions.d.mts.map +1 -0
  16. package/dist/rpc-methods/getPermissions.mjs +24 -0
  17. package/dist/rpc-methods/getPermissions.mjs.map +1 -0
  18. package/dist/rpc-methods/index.cjs +12 -0
  19. package/dist/rpc-methods/index.cjs.map +1 -0
  20. package/dist/rpc-methods/index.d.cts +6 -0
  21. package/dist/rpc-methods/index.d.cts.map +1 -0
  22. package/dist/rpc-methods/index.d.mts +6 -0
  23. package/dist/rpc-methods/index.d.mts.map +1 -0
  24. package/dist/rpc-methods/index.mjs +9 -0
  25. package/dist/rpc-methods/index.mjs.map +1 -0
  26. package/dist/rpc-methods/requestPermissions.cjs +36 -0
  27. package/dist/rpc-methods/requestPermissions.cjs.map +1 -0
  28. package/dist/rpc-methods/requestPermissions.d.cts +17 -0
  29. package/dist/rpc-methods/requestPermissions.d.cts.map +1 -0
  30. package/dist/rpc-methods/requestPermissions.d.mts +17 -0
  31. package/dist/rpc-methods/requestPermissions.d.mts.map +1 -0
  32. package/dist/rpc-methods/requestPermissions.mjs +33 -0
  33. package/dist/rpc-methods/requestPermissions.mjs.map +1 -0
  34. package/dist/rpc-methods/revokePermissions.cjs +41 -0
  35. package/dist/rpc-methods/revokePermissions.cjs.map +1 -0
  36. package/dist/rpc-methods/revokePermissions.d.cts +11 -0
  37. package/dist/rpc-methods/revokePermissions.d.cts.map +1 -0
  38. package/dist/rpc-methods/revokePermissions.d.mts +11 -0
  39. package/dist/rpc-methods/revokePermissions.d.mts.map +1 -0
  40. package/dist/rpc-methods/revokePermissions.mjs +38 -0
  41. package/dist/rpc-methods/revokePermissions.mjs.map +1 -0
  42. package/dist/utils.cjs.map +1 -1
  43. package/dist/utils.d.cts +23 -0
  44. package/dist/utils.d.cts.map +1 -1
  45. package/dist/utils.d.mts +23 -0
  46. package/dist/utils.d.mts.map +1 -1
  47. package/dist/utils.mjs.map +1 -1
  48. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
20
20
  - New integrations should prefer `createPermissionMiddlewareV2`, which targets `JsonRpcEngineV2`.
21
21
  - `PermissionController.getRestrictedMethod` no longer serves a purpose, and is removed. Restricted methods should be invoked via the `:executeRestrictedMethod` action instead.
22
22
  - Bump `@metamask/controller-utils` from `^11.19.0` to `^11.20.0` ([#8344](https://github.com/MetaMask/core/pull/8344))
23
- - Bump `@metamask/messenger` from `^1.0.0` to `^1.1.1` ([#8364](https://github.com/MetaMask/core/pull/8364), [#8373](https://github.com/MetaMask/core/pull/8373))
23
+ - Bump `@metamask/messenger` from `^1.0.0` to `^1.2.0` ([#8364](https://github.com/MetaMask/core/pull/8364), [#8373](https://github.com/MetaMask/core/pull/8373), [#8632](https://github.com/MetaMask/core/pull/8632))
24
24
  - Bump `@metamask/base-controller` from `^9.0.1` to `^9.1.0` ([#8457](https://github.com/MetaMask/core/pull/8457))
25
25
 
26
26
  ### Deprecated
@@ -30,8 +30,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
30
30
  ### Removed
31
31
 
32
32
  - **BREAKING:** Remove `factoryHooks`, `validatorHooks`, and related fields from permission specification builders ([#8551](https://github.com/MetaMask/core/pull/8551))
33
- - **BREAKING:** Remove permitted method handlers and types ([#8583](https://github.com/MetaMask/core/pull/8583))
34
- - The permitted method handlers were unused in practice. Replacement types for generic RPC method implementations are available in `@metamask/json-rpc-engine@10.3.0`.
35
33
 
36
34
  ## [12.3.0]
37
35
 
package/dist/index.cjs CHANGED
@@ -10,11 +10,23 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
13
18
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
19
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
20
  };
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
16
28
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.MethodNames = exports.createPermissionMiddlewareV2 = exports.createPermissionMiddleware = exports.createRestrictedMethodMessenger = void 0;
29
+ exports.permissionRpcMethods = exports.MethodNames = exports.createPermissionMiddlewareV2 = exports.createPermissionMiddleware = exports.createRestrictedMethodMessenger = void 0;
18
30
  __exportStar(require("./Caveat.cjs"), exports);
19
31
  var createRestrictedMethodMessenger_1 = require("./createRestrictedMethodMessenger.cjs");
20
32
  Object.defineProperty(exports, "createRestrictedMethodMessenger", { enumerable: true, get: function () { return createRestrictedMethodMessenger_1.createRestrictedMethodMessenger; } });
@@ -26,5 +38,6 @@ Object.defineProperty(exports, "createPermissionMiddleware", { enumerable: true,
26
38
  Object.defineProperty(exports, "createPermissionMiddlewareV2", { enumerable: true, get: function () { return permission_middleware_1.createPermissionMiddlewareV2; } });
27
39
  var utils_1 = require("./utils.cjs");
28
40
  Object.defineProperty(exports, "MethodNames", { enumerable: true, get: function () { return utils_1.MethodNames; } });
41
+ exports.permissionRpcMethods = __importStar(require("./rpc-methods/index.cjs"));
29
42
  __exportStar(require("./SubjectMetadataController.cjs"), exports);
30
43
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,+CAAyB;AACzB,yFAAoF;AAA3E,kJAAA,+BAA+B,OAAA;AACxC,+CAAyB;AACzB,mDAA6B;AAC7B,6DAAuC;AAoBvC,qEAIiC;AAH/B,mIAAA,0BAA0B,OAAA;AAC1B,qIAAA,4BAA4B,OAAA;AAI9B,qCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,kEAA4C","sourcesContent":["export * from './Caveat';\nexport { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger';\nexport * from './errors';\nexport * from './Permission';\nexport * from './PermissionController';\nexport type {\n PermissionControllerClearStateAction,\n PermissionControllerExecuteRestrictedMethodAction,\n PermissionControllerGetCaveatAction,\n PermissionControllerGetEndowmentsAction,\n PermissionControllerGetPermissionsAction,\n PermissionControllerGetSubjectNamesAction,\n PermissionControllerGrantPermissionsAction,\n PermissionControllerGrantPermissionsIncrementalAction,\n PermissionControllerHasPermissionAction,\n PermissionControllerHasPermissionsAction,\n PermissionControllerHasUnrestrictedMethodAction,\n PermissionControllerRequestPermissionsAction,\n PermissionControllerRequestPermissionsIncrementalAction,\n PermissionControllerRevokeAllPermissionsAction,\n PermissionControllerRevokePermissionForAllSubjectsAction,\n PermissionControllerRevokePermissionsAction,\n PermissionControllerUpdateCaveatAction,\n} from './PermissionController-method-action-types';\nexport {\n createPermissionMiddleware,\n createPermissionMiddlewareV2,\n type PermissionMiddlewareActions,\n} from './permission-middleware';\nexport type { ExtractSpecifications } from './utils';\nexport { MethodNames } from './utils';\nexport * from './SubjectMetadataController';\nexport type {\n SubjectMetadataControllerClearStateAction,\n SubjectMetadataControllerAddSubjectMetadataAction,\n SubjectMetadataControllerGetSubjectMetadataAction,\n SubjectMetadataControllerTrimMetadataStateAction,\n} from './SubjectMetadataController-method-action-types';\n"]}
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAyB;AACzB,yFAAoF;AAA3E,kJAAA,+BAA+B,OAAA;AACxC,+CAAyB;AACzB,mDAA6B;AAC7B,6DAAuC;AAoBvC,qEAIiC;AAH/B,mIAAA,0BAA0B,OAAA;AAC1B,qIAAA,4BAA4B,OAAA;AAS9B,qCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,gFAAsD;AACtD,kEAA4C","sourcesContent":["export * from './Caveat';\nexport { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger';\nexport * from './errors';\nexport * from './Permission';\nexport * from './PermissionController';\nexport type {\n PermissionControllerClearStateAction,\n PermissionControllerExecuteRestrictedMethodAction,\n PermissionControllerGetCaveatAction,\n PermissionControllerGetEndowmentsAction,\n PermissionControllerGetPermissionsAction,\n PermissionControllerGetSubjectNamesAction,\n PermissionControllerGrantPermissionsAction,\n PermissionControllerGrantPermissionsIncrementalAction,\n PermissionControllerHasPermissionAction,\n PermissionControllerHasPermissionsAction,\n PermissionControllerHasUnrestrictedMethodAction,\n PermissionControllerRequestPermissionsAction,\n PermissionControllerRequestPermissionsIncrementalAction,\n PermissionControllerRevokeAllPermissionsAction,\n PermissionControllerRevokePermissionForAllSubjectsAction,\n PermissionControllerRevokePermissionsAction,\n PermissionControllerUpdateCaveatAction,\n} from './PermissionController-method-action-types';\nexport {\n createPermissionMiddleware,\n createPermissionMiddlewareV2,\n type PermissionMiddlewareActions,\n} from './permission-middleware';\nexport type {\n ExtractSpecifications,\n HandlerMiddlewareFunction,\n HookNames,\n PermittedHandlerExport,\n} from './utils';\nexport { MethodNames } from './utils';\nexport * as permissionRpcMethods from './rpc-methods';\nexport * from './SubjectMetadataController';\nexport type {\n SubjectMetadataControllerClearStateAction,\n SubjectMetadataControllerAddSubjectMetadataAction,\n SubjectMetadataControllerGetSubjectMetadataAction,\n SubjectMetadataControllerTrimMetadataStateAction,\n} from './SubjectMetadataController-method-action-types';\n"]}
package/dist/index.d.cts CHANGED
@@ -5,8 +5,9 @@ export * from "./Permission.cjs";
5
5
  export * from "./PermissionController.cjs";
6
6
  export type { PermissionControllerClearStateAction, PermissionControllerExecuteRestrictedMethodAction, PermissionControllerGetCaveatAction, PermissionControllerGetEndowmentsAction, PermissionControllerGetPermissionsAction, PermissionControllerGetSubjectNamesAction, PermissionControllerGrantPermissionsAction, PermissionControllerGrantPermissionsIncrementalAction, PermissionControllerHasPermissionAction, PermissionControllerHasPermissionsAction, PermissionControllerHasUnrestrictedMethodAction, PermissionControllerRequestPermissionsAction, PermissionControllerRequestPermissionsIncrementalAction, PermissionControllerRevokeAllPermissionsAction, PermissionControllerRevokePermissionForAllSubjectsAction, PermissionControllerRevokePermissionsAction, PermissionControllerUpdateCaveatAction, } from "./PermissionController-method-action-types.cjs";
7
7
  export { createPermissionMiddleware, createPermissionMiddlewareV2, type PermissionMiddlewareActions, } from "./permission-middleware.cjs";
8
- export type { ExtractSpecifications } from "./utils.cjs";
8
+ export type { ExtractSpecifications, HandlerMiddlewareFunction, HookNames, PermittedHandlerExport, } from "./utils.cjs";
9
9
  export { MethodNames } from "./utils.cjs";
10
+ export * as permissionRpcMethods from "./rpc-methods/index.cjs";
10
11
  export * from "./SubjectMetadataController.cjs";
11
12
  export type { SubjectMetadataControllerClearStateAction, SubjectMetadataControllerAddSubjectMetadataAction, SubjectMetadataControllerGetSubjectMetadataAction, SubjectMetadataControllerTrimMetadataStateAction, } from "./SubjectMetadataController-method-action-types.cjs";
12
13
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAAyB;AACzB,OAAO,EAAE,+BAA+B,EAAE,8CAA0C;AACpF,6BAAyB;AACzB,iCAA6B;AAC7B,2CAAuC;AACvC,YAAY,EACV,oCAAoC,EACpC,iDAAiD,EACjD,mCAAmC,EACnC,uCAAuC,EACvC,wCAAwC,EACxC,yCAAyC,EACzC,0CAA0C,EAC1C,qDAAqD,EACrD,uCAAuC,EACvC,wCAAwC,EACxC,+CAA+C,EAC/C,4CAA4C,EAC5C,uDAAuD,EACvD,8CAA8C,EAC9C,wDAAwD,EACxD,2CAA2C,EAC3C,sCAAsC,GACvC,uDAAmD;AACpD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,KAAK,2BAA2B,GACjC,oCAAgC;AACjC,YAAY,EAAE,qBAAqB,EAAE,oBAAgB;AACrD,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,gDAA4C;AAC5C,YAAY,EACV,yCAAyC,EACzC,iDAAiD,EACjD,iDAAiD,EACjD,gDAAgD,GACjD,4DAAwD"}
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAAyB;AACzB,OAAO,EAAE,+BAA+B,EAAE,8CAA0C;AACpF,6BAAyB;AACzB,iCAA6B;AAC7B,2CAAuC;AACvC,YAAY,EACV,oCAAoC,EACpC,iDAAiD,EACjD,mCAAmC,EACnC,uCAAuC,EACvC,wCAAwC,EACxC,yCAAyC,EACzC,0CAA0C,EAC1C,qDAAqD,EACrD,uCAAuC,EACvC,wCAAwC,EACxC,+CAA+C,EAC/C,4CAA4C,EAC5C,uDAAuD,EACvD,8CAA8C,EAC9C,wDAAwD,EACxD,2CAA2C,EAC3C,sCAAsC,GACvC,uDAAmD;AACpD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,KAAK,2BAA2B,GACjC,oCAAgC;AACjC,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,SAAS,EACT,sBAAsB,GACvB,oBAAgB;AACjB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,OAAO,KAAK,oBAAoB,gCAAsB;AACtD,gDAA4C;AAC5C,YAAY,EACV,yCAAyC,EACzC,iDAAiD,EACjD,iDAAiD,EACjD,gDAAgD,GACjD,4DAAwD"}
package/dist/index.d.mts CHANGED
@@ -5,8 +5,9 @@ export * from "./Permission.mjs";
5
5
  export * from "./PermissionController.mjs";
6
6
  export type { PermissionControllerClearStateAction, PermissionControllerExecuteRestrictedMethodAction, PermissionControllerGetCaveatAction, PermissionControllerGetEndowmentsAction, PermissionControllerGetPermissionsAction, PermissionControllerGetSubjectNamesAction, PermissionControllerGrantPermissionsAction, PermissionControllerGrantPermissionsIncrementalAction, PermissionControllerHasPermissionAction, PermissionControllerHasPermissionsAction, PermissionControllerHasUnrestrictedMethodAction, PermissionControllerRequestPermissionsAction, PermissionControllerRequestPermissionsIncrementalAction, PermissionControllerRevokeAllPermissionsAction, PermissionControllerRevokePermissionForAllSubjectsAction, PermissionControllerRevokePermissionsAction, PermissionControllerUpdateCaveatAction, } from "./PermissionController-method-action-types.mjs";
7
7
  export { createPermissionMiddleware, createPermissionMiddlewareV2, type PermissionMiddlewareActions, } from "./permission-middleware.mjs";
8
- export type { ExtractSpecifications } from "./utils.mjs";
8
+ export type { ExtractSpecifications, HandlerMiddlewareFunction, HookNames, PermittedHandlerExport, } from "./utils.mjs";
9
9
  export { MethodNames } from "./utils.mjs";
10
+ export * as permissionRpcMethods from "./rpc-methods/index.mjs";
10
11
  export * from "./SubjectMetadataController.mjs";
11
12
  export type { SubjectMetadataControllerClearStateAction, SubjectMetadataControllerAddSubjectMetadataAction, SubjectMetadataControllerGetSubjectMetadataAction, SubjectMetadataControllerTrimMetadataStateAction, } from "./SubjectMetadataController-method-action-types.mjs";
12
13
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAAyB;AACzB,OAAO,EAAE,+BAA+B,EAAE,8CAA0C;AACpF,6BAAyB;AACzB,iCAA6B;AAC7B,2CAAuC;AACvC,YAAY,EACV,oCAAoC,EACpC,iDAAiD,EACjD,mCAAmC,EACnC,uCAAuC,EACvC,wCAAwC,EACxC,yCAAyC,EACzC,0CAA0C,EAC1C,qDAAqD,EACrD,uCAAuC,EACvC,wCAAwC,EACxC,+CAA+C,EAC/C,4CAA4C,EAC5C,uDAAuD,EACvD,8CAA8C,EAC9C,wDAAwD,EACxD,2CAA2C,EAC3C,sCAAsC,GACvC,uDAAmD;AACpD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,KAAK,2BAA2B,GACjC,oCAAgC;AACjC,YAAY,EAAE,qBAAqB,EAAE,oBAAgB;AACrD,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,gDAA4C;AAC5C,YAAY,EACV,yCAAyC,EACzC,iDAAiD,EACjD,iDAAiD,EACjD,gDAAgD,GACjD,4DAAwD"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAAyB;AACzB,OAAO,EAAE,+BAA+B,EAAE,8CAA0C;AACpF,6BAAyB;AACzB,iCAA6B;AAC7B,2CAAuC;AACvC,YAAY,EACV,oCAAoC,EACpC,iDAAiD,EACjD,mCAAmC,EACnC,uCAAuC,EACvC,wCAAwC,EACxC,yCAAyC,EACzC,0CAA0C,EAC1C,qDAAqD,EACrD,uCAAuC,EACvC,wCAAwC,EACxC,+CAA+C,EAC/C,4CAA4C,EAC5C,uDAAuD,EACvD,8CAA8C,EAC9C,wDAAwD,EACxD,2CAA2C,EAC3C,sCAAsC,GACvC,uDAAmD;AACpD,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAC5B,KAAK,2BAA2B,GACjC,oCAAgC;AACjC,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,SAAS,EACT,sBAAsB,GACvB,oBAAgB;AACjB,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,OAAO,KAAK,oBAAoB,gCAAsB;AACtD,gDAA4C;AAC5C,YAAY,EACV,yCAAyC,EACzC,iDAAiD,EACjD,iDAAiD,EACjD,gDAAgD,GACjD,4DAAwD"}
package/dist/index.mjs CHANGED
@@ -5,5 +5,6 @@ export * from "./Permission.mjs";
5
5
  export * from "./PermissionController.mjs";
6
6
  export { createPermissionMiddleware, createPermissionMiddlewareV2 } from "./permission-middleware.mjs";
7
7
  export { MethodNames } from "./utils.mjs";
8
+ export * as permissionRpcMethods from "./rpc-methods/index.mjs";
8
9
  export * from "./SubjectMetadataController.mjs";
9
10
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAAyB;AACzB,OAAO,EAAE,+BAA+B,EAAE,8CAA0C;AACpF,6BAAyB;AACzB,iCAA6B;AAC7B,2CAAuC;AAoBvC,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAE7B,oCAAgC;AAEjC,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,gDAA4C","sourcesContent":["export * from './Caveat';\nexport { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger';\nexport * from './errors';\nexport * from './Permission';\nexport * from './PermissionController';\nexport type {\n PermissionControllerClearStateAction,\n PermissionControllerExecuteRestrictedMethodAction,\n PermissionControllerGetCaveatAction,\n PermissionControllerGetEndowmentsAction,\n PermissionControllerGetPermissionsAction,\n PermissionControllerGetSubjectNamesAction,\n PermissionControllerGrantPermissionsAction,\n PermissionControllerGrantPermissionsIncrementalAction,\n PermissionControllerHasPermissionAction,\n PermissionControllerHasPermissionsAction,\n PermissionControllerHasUnrestrictedMethodAction,\n PermissionControllerRequestPermissionsAction,\n PermissionControllerRequestPermissionsIncrementalAction,\n PermissionControllerRevokeAllPermissionsAction,\n PermissionControllerRevokePermissionForAllSubjectsAction,\n PermissionControllerRevokePermissionsAction,\n PermissionControllerUpdateCaveatAction,\n} from './PermissionController-method-action-types';\nexport {\n createPermissionMiddleware,\n createPermissionMiddlewareV2,\n type PermissionMiddlewareActions,\n} from './permission-middleware';\nexport type { ExtractSpecifications } from './utils';\nexport { MethodNames } from './utils';\nexport * from './SubjectMetadataController';\nexport type {\n SubjectMetadataControllerClearStateAction,\n SubjectMetadataControllerAddSubjectMetadataAction,\n SubjectMetadataControllerGetSubjectMetadataAction,\n SubjectMetadataControllerTrimMetadataStateAction,\n} from './SubjectMetadataController-method-action-types';\n"]}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAAyB;AACzB,OAAO,EAAE,+BAA+B,EAAE,8CAA0C;AACpF,6BAAyB;AACzB,iCAA6B;AAC7B,2CAAuC;AAoBvC,OAAO,EACL,0BAA0B,EAC1B,4BAA4B,EAE7B,oCAAgC;AAOjC,OAAO,EAAE,WAAW,EAAE,oBAAgB;AACtC,OAAO,KAAK,oBAAoB,gCAAsB;AACtD,gDAA4C","sourcesContent":["export * from './Caveat';\nexport { createRestrictedMethodMessenger } from './createRestrictedMethodMessenger';\nexport * from './errors';\nexport * from './Permission';\nexport * from './PermissionController';\nexport type {\n PermissionControllerClearStateAction,\n PermissionControllerExecuteRestrictedMethodAction,\n PermissionControllerGetCaveatAction,\n PermissionControllerGetEndowmentsAction,\n PermissionControllerGetPermissionsAction,\n PermissionControllerGetSubjectNamesAction,\n PermissionControllerGrantPermissionsAction,\n PermissionControllerGrantPermissionsIncrementalAction,\n PermissionControllerHasPermissionAction,\n PermissionControllerHasPermissionsAction,\n PermissionControllerHasUnrestrictedMethodAction,\n PermissionControllerRequestPermissionsAction,\n PermissionControllerRequestPermissionsIncrementalAction,\n PermissionControllerRevokeAllPermissionsAction,\n PermissionControllerRevokePermissionForAllSubjectsAction,\n PermissionControllerRevokePermissionsAction,\n PermissionControllerUpdateCaveatAction,\n} from './PermissionController-method-action-types';\nexport {\n createPermissionMiddleware,\n createPermissionMiddlewareV2,\n type PermissionMiddlewareActions,\n} from './permission-middleware';\nexport type {\n ExtractSpecifications,\n HandlerMiddlewareFunction,\n HookNames,\n PermittedHandlerExport,\n} from './utils';\nexport { MethodNames } from './utils';\nexport * as permissionRpcMethods from './rpc-methods';\nexport * from './SubjectMetadataController';\nexport type {\n SubjectMetadataControllerClearStateAction,\n SubjectMetadataControllerAddSubjectMetadataAction,\n SubjectMetadataControllerGetSubjectMetadataAction,\n SubjectMetadataControllerTrimMetadataStateAction,\n} from './SubjectMetadataController-method-action-types';\n"]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPermissionsHandler = void 0;
4
+ const utils_1 = require("../utils.cjs");
5
+ exports.getPermissionsHandler = {
6
+ methodNames: [utils_1.MethodNames.GetPermissions],
7
+ implementation: getPermissionsImplementation,
8
+ hookNames: {
9
+ getPermissionsForOrigin: true,
10
+ },
11
+ };
12
+ /**
13
+ * Get Permissions implementation to be used in JsonRpcEngine middleware.
14
+ *
15
+ * @param _req - The JsonRpcEngine request - unused
16
+ * @param res - The JsonRpcEngine result object
17
+ * @param _next - JsonRpcEngine next() callback - unused
18
+ * @param end - JsonRpcEngine end() callback
19
+ * @param options - Method hooks passed to the method implementation
20
+ * @param options.getPermissionsForOrigin - The specific method hook needed for this method implementation
21
+ * @returns A promise that resolves to nothing
22
+ */
23
+ async function getPermissionsImplementation(_req, res, _next, end, { getPermissionsForOrigin }) {
24
+ res.result = Object.values(getPermissionsForOrigin() || {});
25
+ return end();
26
+ }
27
+ //# sourceMappingURL=getPermissions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPermissions.cjs","sourceRoot":"","sources":["../../src/rpc-methods/getPermissions.ts"],"names":[],"mappings":";;;AAMA,wCAAuC;AAE1B,QAAA,qBAAqB,GAI9B;IACF,WAAW,EAAE,CAAC,mBAAW,CAAC,cAAc,CAAC;IACzC,cAAc,EAAE,4BAA4B;IAC5C,SAAS,EAAE;QACT,uBAAuB,EAAE,IAAI;KAC9B;CACF,CAAC;AAOF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,4BAA4B,CACzC,IAAa,EACb,GAAmD,EACnD,KAAc,EACd,GAA6B,EAC7B,EAAE,uBAAuB,EAAuB;IAEhD,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","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"]}
@@ -0,0 +1,9 @@
1
+ import type { PermissionConstraint } from "../Permission.cjs";
2
+ import type { SubjectPermissions } from "../PermissionController.cjs";
3
+ import type { PermittedHandlerExport } from "../utils.cjs";
4
+ export declare const getPermissionsHandler: PermittedHandlerExport<GetPermissionsHooks, [
5
+ ], PermissionConstraint[]>;
6
+ export type GetPermissionsHooks = {
7
+ getPermissionsForOrigin: () => SubjectPermissions<PermissionConstraint>;
8
+ };
9
+ //# sourceMappingURL=getPermissions.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPermissions.d.cts","sourceRoot":"","sources":["../../src/rpc-methods/getPermissions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAAsB;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,oCAAgC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAiB;AAGvD,eAAO,MAAM,qBAAqB,EAAE,sBAAsB,CACxD,mBAAmB,EACnB;CAAE,EACF,oBAAoB,EAAE,CAOvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAEhC,uBAAuB,EAAE,MAAM,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;CACzE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { PermissionConstraint } from "../Permission.mjs";
2
+ import type { SubjectPermissions } from "../PermissionController.mjs";
3
+ import type { PermittedHandlerExport } from "../utils.mjs";
4
+ export declare const getPermissionsHandler: PermittedHandlerExport<GetPermissionsHooks, [
5
+ ], PermissionConstraint[]>;
6
+ export type GetPermissionsHooks = {
7
+ getPermissionsForOrigin: () => SubjectPermissions<PermissionConstraint>;
8
+ };
9
+ //# sourceMappingURL=getPermissions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPermissions.d.mts","sourceRoot":"","sources":["../../src/rpc-methods/getPermissions.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAAsB;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,oCAAgC;AAClE,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAiB;AAGvD,eAAO,MAAM,qBAAqB,EAAE,sBAAsB,CACxD,mBAAmB,EACnB;CAAE,EACF,oBAAoB,EAAE,CAOvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAEhC,uBAAuB,EAAE,MAAM,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;CACzE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { MethodNames } from "../utils.mjs";
2
+ export const getPermissionsHandler = {
3
+ methodNames: [MethodNames.GetPermissions],
4
+ implementation: getPermissionsImplementation,
5
+ hookNames: {
6
+ getPermissionsForOrigin: true,
7
+ },
8
+ };
9
+ /**
10
+ * Get Permissions implementation to be used in JsonRpcEngine middleware.
11
+ *
12
+ * @param _req - The JsonRpcEngine request - unused
13
+ * @param res - The JsonRpcEngine result object
14
+ * @param _next - JsonRpcEngine next() callback - unused
15
+ * @param end - JsonRpcEngine end() callback
16
+ * @param options - Method hooks passed to the method implementation
17
+ * @param options.getPermissionsForOrigin - The specific method hook needed for this method implementation
18
+ * @returns A promise that resolves to nothing
19
+ */
20
+ async function getPermissionsImplementation(_req, res, _next, end, { getPermissionsForOrigin }) {
21
+ res.result = Object.values(getPermissionsForOrigin() || {});
22
+ return end();
23
+ }
24
+ //# sourceMappingURL=getPermissions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPermissions.mjs","sourceRoot":"","sources":["../../src/rpc-methods/getPermissions.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,qBAAiB;AAEvC,MAAM,CAAC,MAAM,qBAAqB,GAI9B;IACF,WAAW,EAAE,CAAC,WAAW,CAAC,cAAc,CAAC;IACzC,cAAc,EAAE,4BAA4B;IAC5C,SAAS,EAAE;QACT,uBAAuB,EAAE,IAAI;KAC9B;CACF,CAAC;AAOF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,4BAA4B,CACzC,IAAa,EACb,GAAmD,EACnD,KAAc,EACd,GAA6B,EAC7B,EAAE,uBAAuB,EAAuB;IAEhD,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","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"]}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handlers = void 0;
4
+ const getPermissions_1 = require("./getPermissions.cjs");
5
+ const requestPermissions_1 = require("./requestPermissions.cjs");
6
+ const revokePermissions_1 = require("./revokePermissions.cjs");
7
+ exports.handlers = [
8
+ requestPermissions_1.requestPermissionsHandler,
9
+ getPermissions_1.getPermissionsHandler,
10
+ revokePermissions_1.revokePermissionsHandler,
11
+ ];
12
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/rpc-methods/index.ts"],"names":[],"mappings":";;;AACA,yDAAyD;AAEzD,iEAAiE;AAEjE,+DAA+D;AAMlD,QAAA,QAAQ,GAAG;IACtB,8CAAyB;IACzB,sCAAqB;IACrB,4CAAwB;CAChB,CAAC","sourcesContent":["import type { GetPermissionsHooks } from './getPermissions';\nimport { getPermissionsHandler } from './getPermissions';\nimport type { RequestPermissionsHooks } from './requestPermissions';\nimport { requestPermissionsHandler } from './requestPermissions';\nimport type { RevokePermissionsHooks } from './revokePermissions';\nimport { revokePermissionsHandler } from './revokePermissions';\n\nexport type PermittedRpcMethodHooks = RequestPermissionsHooks &\n GetPermissionsHooks &\n RevokePermissionsHooks;\n\nexport const handlers = [\n requestPermissionsHandler,\n getPermissionsHandler,\n revokePermissionsHandler,\n] as const;\n"]}
@@ -0,0 +1,6 @@
1
+ import type { GetPermissionsHooks } from "./getPermissions.cjs";
2
+ import type { RequestPermissionsHooks } from "./requestPermissions.cjs";
3
+ import type { RevokePermissionsHooks } from "./revokePermissions.cjs";
4
+ export type PermittedRpcMethodHooks = RequestPermissionsHooks & GetPermissionsHooks & RevokePermissionsHooks;
5
+ export declare const handlers: readonly [import("../index.cjs").PermittedHandlerExport<RequestPermissionsHooks, [import("../index.cjs").RequestedPermissions], import("../index.cjs").PermissionConstraint[]>, import("../index.cjs").PermittedHandlerExport<GetPermissionsHooks, [], import("../index.cjs").PermissionConstraint[]>, import("../index.cjs").PermittedHandlerExport<RevokePermissionsHooks, import("./revokePermissions.cjs").RevokePermissionArgs, null>];
6
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/rpc-methods/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAAyB;AAE5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,iCAA6B;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,gCAA4B;AAGlE,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,GAC3D,mBAAmB,GACnB,sBAAsB,CAAC;AAEzB,eAAO,MAAM,QAAQ,6WAIX,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { GetPermissionsHooks } from "./getPermissions.mjs";
2
+ import type { RequestPermissionsHooks } from "./requestPermissions.mjs";
3
+ import type { RevokePermissionsHooks } from "./revokePermissions.mjs";
4
+ export type PermittedRpcMethodHooks = RequestPermissionsHooks & GetPermissionsHooks & RevokePermissionsHooks;
5
+ export declare const handlers: readonly [import("../index.mjs").PermittedHandlerExport<RequestPermissionsHooks, [import("../index.mjs").RequestedPermissions], import("../index.mjs").PermissionConstraint[]>, import("../index.mjs").PermittedHandlerExport<GetPermissionsHooks, [], import("../index.mjs").PermissionConstraint[]>, import("../index.mjs").PermittedHandlerExport<RevokePermissionsHooks, import("./revokePermissions.mjs").RevokePermissionArgs, null>];
6
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/rpc-methods/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,6BAAyB;AAE5D,OAAO,KAAK,EAAE,uBAAuB,EAAE,iCAA6B;AAEpE,OAAO,KAAK,EAAE,sBAAsB,EAAE,gCAA4B;AAGlE,MAAM,MAAM,uBAAuB,GAAG,uBAAuB,GAC3D,mBAAmB,GACnB,sBAAsB,CAAC;AAEzB,eAAO,MAAM,QAAQ,6WAIX,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { getPermissionsHandler } from "./getPermissions.mjs";
2
+ import { requestPermissionsHandler } from "./requestPermissions.mjs";
3
+ import { revokePermissionsHandler } from "./revokePermissions.mjs";
4
+ export const handlers = [
5
+ requestPermissionsHandler,
6
+ getPermissionsHandler,
7
+ revokePermissionsHandler,
8
+ ];
9
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/rpc-methods/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,6BAAyB;AAEzD,OAAO,EAAE,yBAAyB,EAAE,iCAA6B;AAEjE,OAAO,EAAE,wBAAwB,EAAE,gCAA4B;AAM/D,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,yBAAyB;IACzB,qBAAqB;IACrB,wBAAwB;CAChB,CAAC","sourcesContent":["import type { GetPermissionsHooks } from './getPermissions';\nimport { getPermissionsHandler } from './getPermissions';\nimport type { RequestPermissionsHooks } from './requestPermissions';\nimport { requestPermissionsHandler } from './requestPermissions';\nimport type { RevokePermissionsHooks } from './revokePermissions';\nimport { revokePermissionsHandler } from './revokePermissions';\n\nexport type PermittedRpcMethodHooks = RequestPermissionsHooks &\n GetPermissionsHooks &\n RevokePermissionsHooks;\n\nexport const handlers = [\n requestPermissionsHandler,\n getPermissionsHandler,\n revokePermissionsHandler,\n] as const;\n"]}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestPermissionsHandler = void 0;
4
+ const controller_utils_1 = require("@metamask/controller-utils");
5
+ const errors_1 = require("../errors.cjs");
6
+ const utils_1 = require("../utils.cjs");
7
+ exports.requestPermissionsHandler = {
8
+ methodNames: [utils_1.MethodNames.RequestPermissions],
9
+ implementation: requestPermissionsImplementation,
10
+ hookNames: {
11
+ requestPermissionsForOrigin: true,
12
+ },
13
+ };
14
+ /**
15
+ * Request Permissions implementation to be used in JsonRpcEngine middleware.
16
+ *
17
+ * @param req - The JsonRpcEngine request
18
+ * @param res - The JsonRpcEngine result object
19
+ * @param _next - JsonRpcEngine next() callback - unused
20
+ * @param end - JsonRpcEngine end() callback
21
+ * @param options - Method hooks passed to the method implementation
22
+ * @param options.requestPermissionsForOrigin - The specific method hook needed for this method implementation
23
+ * @returns A promise that resolves to nothing
24
+ */
25
+ async function requestPermissionsImplementation(req, res, _next, end, { requestPermissionsForOrigin }) {
26
+ const { params } = req;
27
+ if (!Array.isArray(params) || !(0, controller_utils_1.isPlainObject)(params[0])) {
28
+ return end((0, errors_1.invalidParams)({ data: { request: req } }));
29
+ }
30
+ const [requestedPermissions] = params;
31
+ const [grantedPermissions] = await requestPermissionsForOrigin(requestedPermissions);
32
+ // `wallet_requestPermission` is specified to return an array.
33
+ res.result = Object.values(grantedPermissions);
34
+ return end();
35
+ }
36
+ //# sourceMappingURL=requestPermissions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestPermissions.cjs","sourceRoot":"","sources":["../../src/rpc-methods/requestPermissions.ts"],"names":[],"mappings":";;;AAAA,iEAA2D;AAI3D,0CAA0C;AAG1C,wCAAuC;AAE1B,QAAA,yBAAyB,GAIlC;IACF,WAAW,EAAE,CAAC,mBAAW,CAAC,kBAAkB,CAAC;IAC7C,cAAc,EAAE,gCAAgC;IAChD,SAAS,EAAE;QACT,2BAA2B,EAAE,IAAI;KAClC;CACF,CAAC;AAYF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,gCAAgC,CAC7C,GAA2C,EAC3C,GAAmD,EACnD,KAAc,EACd,GAA6B,EAC7B,EAAE,2BAA2B,EAA2B;IAExD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,gCAAa,EAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,GAAG,CAAC,IAAA,sBAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC;IACtC,MAAM,CAAC,kBAAkB,CAAC,GACxB,MAAM,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;IAE1D,8DAA8D;IAC9D,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC/C,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","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] =\n await requestPermissionsForOrigin(requestedPermissions);\n\n // `wallet_requestPermission` is specified to return an array.\n res.result = Object.values(grantedPermissions);\n return end();\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import type { PermissionConstraint, RequestedPermissions } from "../Permission.cjs";
2
+ import type { PermittedHandlerExport } from "../utils.cjs";
3
+ export declare const requestPermissionsHandler: PermittedHandlerExport<RequestPermissionsHooks, [
4
+ RequestedPermissions
5
+ ], PermissionConstraint[]>;
6
+ type RequestPermissions = (requestedPermissions: RequestedPermissions) => Promise<[
7
+ Record<string, PermissionConstraint>,
8
+ {
9
+ id: string;
10
+ origin: string;
11
+ }
12
+ ]>;
13
+ export type RequestPermissionsHooks = {
14
+ requestPermissionsForOrigin: RequestPermissions;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=requestPermissions.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestPermissions.d.cts","sourceRoot":"","sources":["../../src/rpc-methods/requestPermissions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAAsB;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAiB;AAGvD,eAAO,MAAM,yBAAyB,EAAE,sBAAsB,CAC5D,uBAAuB,EACvB;IAAC,oBAAoB;CAAC,EACtB,oBAAoB,EAAE,CAOvB,CAAC;AAEF,KAAK,kBAAkB,GAAG,CACxB,oBAAoB,EAAE,oBAAoB,KACvC,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,MAAM,MAAM,uBAAuB,GAAG;IACpC,2BAA2B,EAAE,kBAAkB,CAAC;CACjD,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { PermissionConstraint, RequestedPermissions } from "../Permission.mjs";
2
+ import type { PermittedHandlerExport } from "../utils.mjs";
3
+ export declare const requestPermissionsHandler: PermittedHandlerExport<RequestPermissionsHooks, [
4
+ RequestedPermissions
5
+ ], PermissionConstraint[]>;
6
+ type RequestPermissions = (requestedPermissions: RequestedPermissions) => Promise<[
7
+ Record<string, PermissionConstraint>,
8
+ {
9
+ id: string;
10
+ origin: string;
11
+ }
12
+ ]>;
13
+ export type RequestPermissionsHooks = {
14
+ requestPermissionsForOrigin: RequestPermissions;
15
+ };
16
+ export {};
17
+ //# sourceMappingURL=requestPermissions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestPermissions.d.mts","sourceRoot":"","sources":["../../src/rpc-methods/requestPermissions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,0BAAsB;AAChF,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAiB;AAGvD,eAAO,MAAM,yBAAyB,EAAE,sBAAsB,CAC5D,uBAAuB,EACvB;IAAC,oBAAoB;CAAC,EACtB,oBAAoB,EAAE,CAOvB,CAAC;AAEF,KAAK,kBAAkB,GAAG,CACxB,oBAAoB,EAAE,oBAAoB,KACvC,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,MAAM,MAAM,uBAAuB,GAAG;IACpC,2BAA2B,EAAE,kBAAkB,CAAC;CACjD,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { isPlainObject } from "@metamask/controller-utils";
2
+ import { invalidParams } from "../errors.mjs";
3
+ import { MethodNames } from "../utils.mjs";
4
+ export const requestPermissionsHandler = {
5
+ methodNames: [MethodNames.RequestPermissions],
6
+ implementation: requestPermissionsImplementation,
7
+ hookNames: {
8
+ requestPermissionsForOrigin: true,
9
+ },
10
+ };
11
+ /**
12
+ * Request Permissions implementation to be used in JsonRpcEngine middleware.
13
+ *
14
+ * @param req - The JsonRpcEngine request
15
+ * @param res - The JsonRpcEngine result object
16
+ * @param _next - JsonRpcEngine next() callback - unused
17
+ * @param end - JsonRpcEngine end() callback
18
+ * @param options - Method hooks passed to the method implementation
19
+ * @param options.requestPermissionsForOrigin - The specific method hook needed for this method implementation
20
+ * @returns A promise that resolves to nothing
21
+ */
22
+ async function requestPermissionsImplementation(req, res, _next, end, { requestPermissionsForOrigin }) {
23
+ const { params } = req;
24
+ if (!Array.isArray(params) || !isPlainObject(params[0])) {
25
+ return end(invalidParams({ data: { request: req } }));
26
+ }
27
+ const [requestedPermissions] = params;
28
+ const [grantedPermissions] = await requestPermissionsForOrigin(requestedPermissions);
29
+ // `wallet_requestPermission` is specified to return an array.
30
+ res.result = Object.values(grantedPermissions);
31
+ return end();
32
+ }
33
+ //# sourceMappingURL=requestPermissions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestPermissions.mjs","sourceRoot":"","sources":["../../src/rpc-methods/requestPermissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mCAAmC;AAI3D,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAG1C,OAAO,EAAE,WAAW,EAAE,qBAAiB;AAEvC,MAAM,CAAC,MAAM,yBAAyB,GAIlC;IACF,WAAW,EAAE,CAAC,WAAW,CAAC,kBAAkB,CAAC;IAC7C,cAAc,EAAE,gCAAgC;IAChD,SAAS,EAAE;QACT,2BAA2B,EAAE,IAAI;KAClC;CACF,CAAC;AAYF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,gCAAgC,CAC7C,GAA2C,EAC3C,GAAmD,EACnD,KAAc,EACd,GAA6B,EAC7B,EAAE,2BAA2B,EAA2B;IAExD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,GAAG,MAAM,CAAC;IACtC,MAAM,CAAC,kBAAkB,CAAC,GACxB,MAAM,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;IAE1D,8DAA8D;IAC9D,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC/C,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","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] =\n await requestPermissionsForOrigin(requestedPermissions);\n\n // `wallet_requestPermission` is specified to return an array.\n res.result = Object.values(grantedPermissions);\n return end();\n}\n"]}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.revokePermissionsHandler = void 0;
4
+ const utils_1 = require("@metamask/utils");
5
+ const errors_1 = require("../errors.cjs");
6
+ const utils_2 = require("../utils.cjs");
7
+ exports.revokePermissionsHandler = {
8
+ methodNames: [utils_2.MethodNames.RevokePermissions],
9
+ implementation: revokePermissionsImplementation,
10
+ hookNames: {
11
+ revokePermissionsForOrigin: true,
12
+ },
13
+ };
14
+ /**
15
+ * Revoke Permissions implementation to be used in JsonRpcEngine middleware.
16
+ *
17
+ * @param req - The JsonRpcEngine request
18
+ * @param res - The JsonRpcEngine result object
19
+ * @param _next - JsonRpcEngine next() callback - unused
20
+ * @param end - JsonRpcEngine end() callback
21
+ * @param options - Method hooks passed to the method implementation
22
+ * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin
23
+ * @returns A promise that resolves to nothing
24
+ */
25
+ async function revokePermissionsImplementation(req, res, _next, end, { revokePermissionsForOrigin }) {
26
+ const { params } = req;
27
+ const param = params?.[0];
28
+ if (!param) {
29
+ return end((0, errors_1.invalidParams)({ data: { request: req } }));
30
+ }
31
+ // For now, this API revokes the entire permission key
32
+ // even if caveats are specified.
33
+ const permissionKeys = Object.keys(param);
34
+ if (!(0, utils_1.isNonEmptyArray)(permissionKeys)) {
35
+ return end((0, errors_1.invalidParams)({ data: { request: req } }));
36
+ }
37
+ revokePermissionsForOrigin(permissionKeys);
38
+ res.result = null;
39
+ return end();
40
+ }
41
+ //# sourceMappingURL=revokePermissions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revokePermissions.cjs","sourceRoot":"","sources":["../../src/rpc-methods/revokePermissions.ts"],"names":[],"mappings":";;;AACA,2CAAkD;AAQlD,0CAA0C;AAG1C,wCAAuC;AAE1B,QAAA,wBAAwB,GAIjC;IACF,WAAW,EAAE,CAAC,mBAAW,CAAC,iBAAiB,CAAC;IAC5C,cAAc,EAAE,+BAA+B;IAC/C,SAAS,EAAE;QACT,0BAA0B,EAAE,IAAI;KACjC;CACF,CAAC;AAeF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,+BAA+B,CAC5C,GAAyC,EACzC,GAAiC,EACjC,KAAc,EACd,GAA6B,EAC7B,EAAE,0BAA0B,EAA0B;IAEtD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,GAAG,CAAC,IAAA,sBAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,CAAC,IAAA,uBAAe,EAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC,IAAA,sBAAa,EAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,0BAA0B,CAAC,cAAc,CAAC,CAAC;IAE3C,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport { isNonEmptyArray } from '@metamask/utils';\nimport type {\n Json,\n JsonRpcRequest,\n NonEmptyArray,\n 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"]}
@@ -0,0 +1,11 @@
1
+ import type { Json, NonEmptyArray } from "@metamask/utils";
2
+ import type { PermissionConstraint } from "../Permission.cjs";
3
+ import type { PermittedHandlerExport } from "../utils.cjs";
4
+ export declare const revokePermissionsHandler: PermittedHandlerExport<RevokePermissionsHooks, RevokePermissionArgs, null>;
5
+ export type RevokePermissionArgs = Record<PermissionConstraint['parentCapability'], Json>;
6
+ type RevokePermissions = (permissions: NonEmptyArray<PermissionConstraint['parentCapability']>) => void;
7
+ export type RevokePermissionsHooks = {
8
+ revokePermissionsForOrigin: RevokePermissions;
9
+ };
10
+ export {};
11
+ //# sourceMappingURL=revokePermissions.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revokePermissions.d.cts","sourceRoot":"","sources":["../../src/rpc-methods/revokePermissions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,IAAI,EAEJ,aAAa,EAEd,wBAAwB;AAGzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAAsB;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAiB;AAGvD,eAAO,MAAM,wBAAwB,EAAE,sBAAsB,CAC3D,sBAAsB,EACtB,oBAAoB,EACpB,IAAI,CAOL,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,oBAAoB,CAAC,kBAAkB,CAAC,EACxC,IAAI,CACL,CAAC;AAEF,KAAK,iBAAiB,GAAG,CACvB,WAAW,EAAE,aAAa,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,KACjE,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,GAAG;IACnC,0BAA0B,EAAE,iBAAiB,CAAC;CAC/C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Json, NonEmptyArray } from "@metamask/utils";
2
+ import type { PermissionConstraint } from "../Permission.mjs";
3
+ import type { PermittedHandlerExport } from "../utils.mjs";
4
+ export declare const revokePermissionsHandler: PermittedHandlerExport<RevokePermissionsHooks, RevokePermissionArgs, null>;
5
+ export type RevokePermissionArgs = Record<PermissionConstraint['parentCapability'], Json>;
6
+ type RevokePermissions = (permissions: NonEmptyArray<PermissionConstraint['parentCapability']>) => void;
7
+ export type RevokePermissionsHooks = {
8
+ revokePermissionsForOrigin: RevokePermissions;
9
+ };
10
+ export {};
11
+ //# sourceMappingURL=revokePermissions.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revokePermissions.d.mts","sourceRoot":"","sources":["../../src/rpc-methods/revokePermissions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,IAAI,EAEJ,aAAa,EAEd,wBAAwB;AAGzB,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAAsB;AAC1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAiB;AAGvD,eAAO,MAAM,wBAAwB,EAAE,sBAAsB,CAC3D,sBAAsB,EACtB,oBAAoB,EACpB,IAAI,CAOL,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,oBAAoB,CAAC,kBAAkB,CAAC,EACxC,IAAI,CACL,CAAC;AAEF,KAAK,iBAAiB,GAAG,CACvB,WAAW,EAAE,aAAa,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,CAAC,KACjE,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,GAAG;IACnC,0BAA0B,EAAE,iBAAiB,CAAC;CAC/C,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { isNonEmptyArray } from "@metamask/utils";
2
+ import { invalidParams } from "../errors.mjs";
3
+ import { MethodNames } from "../utils.mjs";
4
+ export const revokePermissionsHandler = {
5
+ methodNames: [MethodNames.RevokePermissions],
6
+ implementation: revokePermissionsImplementation,
7
+ hookNames: {
8
+ revokePermissionsForOrigin: true,
9
+ },
10
+ };
11
+ /**
12
+ * Revoke Permissions implementation to be used in JsonRpcEngine middleware.
13
+ *
14
+ * @param req - The JsonRpcEngine request
15
+ * @param res - The JsonRpcEngine result object
16
+ * @param _next - JsonRpcEngine next() callback - unused
17
+ * @param end - JsonRpcEngine end() callback
18
+ * @param options - Method hooks passed to the method implementation
19
+ * @param options.revokePermissionsForOrigin - A hook that revokes given permission keys for an origin
20
+ * @returns A promise that resolves to nothing
21
+ */
22
+ async function revokePermissionsImplementation(req, res, _next, end, { revokePermissionsForOrigin }) {
23
+ const { params } = req;
24
+ const param = params?.[0];
25
+ if (!param) {
26
+ return end(invalidParams({ data: { request: req } }));
27
+ }
28
+ // For now, this API revokes the entire permission key
29
+ // even if caveats are specified.
30
+ const permissionKeys = Object.keys(param);
31
+ if (!isNonEmptyArray(permissionKeys)) {
32
+ return end(invalidParams({ data: { request: req } }));
33
+ }
34
+ revokePermissionsForOrigin(permissionKeys);
35
+ res.result = null;
36
+ return end();
37
+ }
38
+ //# sourceMappingURL=revokePermissions.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revokePermissions.mjs","sourceRoot":"","sources":["../../src/rpc-methods/revokePermissions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,wBAAwB;AAQlD,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAG1C,OAAO,EAAE,WAAW,EAAE,qBAAiB;AAEvC,MAAM,CAAC,MAAM,wBAAwB,GAIjC;IACF,WAAW,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAC5C,cAAc,EAAE,+BAA+B;IAC/C,SAAS,EAAE;QACT,0BAA0B,EAAE,IAAI;KACjC;CACF,CAAC;AAeF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,+BAA+B,CAC5C,GAAyC,EACzC,GAAiC,EACjC,KAAc,EACd,GAA6B,EAC7B,EAAE,0BAA0B,EAA0B;IAEtD,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEvB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,sDAAsD;IACtD,iCAAiC;IACjC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,GAAG,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,0BAA0B,CAAC,cAAc,CAAC,CAAC;IAE3C,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;IAElB,OAAO,GAAG,EAAE,CAAC;AACf,CAAC","sourcesContent":["import type { JsonRpcEngineEndCallback } from '@metamask/json-rpc-engine';\nimport { isNonEmptyArray } from '@metamask/utils';\nimport type {\n Json,\n JsonRpcRequest,\n NonEmptyArray,\n 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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAWA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,+DAAgD,CAAA;IAChD,uDAAwC,CAAA;IACxC,6DAA8C,CAAA;AAChD,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAgBD;;;;;;;;;;;GAWG;AACH,SAAgB,6BAA6B,CAC3C,cAAyD,EACzD,eAA8C;IAM9C,MAAM,WAAW,GAAG,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IACjD,MAAM,WAAW,GAA2C,EAAE,CAAC;IAE/D,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,MAAM,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAC7C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CACtD,CAAC;QAEF,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5B,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC/D,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,iBAAiB;QACjB,kBAAkB,EAAE,CAAC,GAAG,YAAY,CAAC;KACtC,CAAC;AACJ,CAAC;AA/BD,sEA+BC","sourcesContent":["import 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 * 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 caveatPairs: [CaveatConstraint, CaveatConstraint][];\n leftUniqueCaveats: CaveatConstraint[];\n rightUniqueCaveats: CaveatConstraint[];\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"]}
1
+ {"version":3,"file":"utils.cjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAsBA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,+DAAgD,CAAA;IAChD,uDAAwC,CAAA;IACxC,6DAA8C,CAAA;AAChD,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAsDD;;;;;;;;;;;GAWG;AACH,SAAgB,6BAA6B,CAC3C,cAAyD,EACzD,eAA8C;IAM9C,MAAM,WAAW,GAAG,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IACjD,MAAM,WAAW,GAA2C,EAAE,CAAC;IAE/D,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,MAAM,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAC7C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CACtD,CAAC;QAEF,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5B,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC/D,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,iBAAiB;QACjB,kBAAkB,EAAE,CAAC,GAAG,YAAY,CAAC;KACtC,CAAC;AACJ,CAAC;AA/BD,sEA+BC","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 caveatPairs: [CaveatConstraint, CaveatConstraint][];\n leftUniqueCaveats: CaveatConstraint[];\n rightUniqueCaveats: CaveatConstraint[];\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"]}
package/dist/utils.d.cts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { JsonRpcEngineEndCallback, JsonRpcEngineNextCallback } from "@metamask/json-rpc-engine";
2
+ import type { Json, JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
1
3
  import type { CaveatConstraint, CaveatSpecificationConstraint, CaveatSpecificationMap } from "./Caveat.cjs";
2
4
  import type { PermissionConstraint, PermissionSpecificationConstraint, PermissionSpecificationMap } from "./Permission.cjs";
3
5
  export declare enum MethodNames {
@@ -14,6 +16,27 @@ export declare enum MethodNames {
14
16
  * whose specification type union to extract.
15
17
  */
16
18
  export type ExtractSpecifications<SpecificationsMap extends CaveatSpecificationMap<CaveatSpecificationConstraint> | PermissionSpecificationMap<PermissionSpecificationConstraint>> = SpecificationsMap[keyof SpecificationsMap];
19
+ /**
20
+ * A middleware function for handling a permitted method.
21
+ */
22
+ export type HandlerMiddlewareFunction<Hooks, Params extends JsonRpcParams, Result extends Json> = (req: JsonRpcRequest<Params>, res: PendingJsonRpcResponse<Result>, next: JsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, hooks: Hooks) => void | Promise<void>;
23
+ /**
24
+ * We use a mapped object type in order to create a type that requires the
25
+ * presence of the names of all hooks for the given handler.
26
+ * This can then be used to select only the necessary hooks whenever a method
27
+ * is called for purposes of POLA.
28
+ */
29
+ export type HookNames<HookMap> = {
30
+ [Property in keyof HookMap]: true;
31
+ };
32
+ /**
33
+ * A handler for a permitted method.
34
+ */
35
+ export type PermittedHandlerExport<Hooks, Params extends JsonRpcParams, Result extends Json> = {
36
+ implementation: HandlerMiddlewareFunction<Hooks, Params, Result>;
37
+ hookNames: HookNames<Hooks>;
38
+ methodNames: string[];
39
+ };
17
40
  /**
18
41
  * Given two permission objects, computes 3 sets:
19
42
  * - The set of caveat pairs that are common to both permissions.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.cts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACvB,qBAAiB;AAClB,OAAO,KAAK,EACV,oBAAoB,EACpB,iCAAiC,EACjC,0BAA0B,EAC3B,yBAAqB;AAEtB,oBAAY,WAAW;IACrB,kBAAkB,8BAA8B;IAChD,cAAc,0BAA0B;IACxC,iBAAiB,6BAA6B;CAC/C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,CAC/B,iBAAiB,SACb,sBAAsB,CAAC,6BAA6B,CAAC,GACrD,0BAA0B,CAAC,iCAAiC,CAAC,IAC/D,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,EACzD,eAAe,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC7C;IACD,WAAW,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;IACpD,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;CACxC,CAwBA"}
1
+ {"version":3,"file":"utils.d.cts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,kCAAkC;AACnC,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAEzB,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACvB,qBAAiB;AAClB,OAAO,KAAK,EACV,oBAAoB,EACpB,iCAAiC,EACjC,0BAA0B,EAC3B,yBAAqB;AAEtB,oBAAY,WAAW;IACrB,kBAAkB,8BAA8B;IAChD,cAAc,0BAA0B;IACxC,iBAAiB,6BAA6B;CAC/C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,CAC/B,iBAAiB,SACb,sBAAsB,CAAC,6BAA6B,CAAC,GACrD,0BAA0B,CAAC,iCAAiC,CAAC,IAC/D,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,yBAAyB,CACnC,KAAK,EACL,MAAM,SAAS,aAAa,EAC5B,MAAM,SAAS,IAAI,IACjB,CACF,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,EAC3B,GAAG,EAAE,sBAAsB,CAAC,MAAM,CAAC,EACnC,IAAI,EAAE,yBAAyB,EAC/B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,KAAK,KACT,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,MAAM,SAAS,CAAC,OAAO,IAAI;KAC9B,QAAQ,IAAI,MAAM,OAAO,GAAG,IAAI;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAChC,KAAK,EACL,MAAM,SAAS,aAAa,EAC5B,MAAM,SAAS,IAAI,IACjB;IACF,cAAc,EAAE,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,EACzD,eAAe,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC7C;IACD,WAAW,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;IACpD,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;CACxC,CAwBA"}
package/dist/utils.d.mts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { JsonRpcEngineEndCallback, JsonRpcEngineNextCallback } from "@metamask/json-rpc-engine";
2
+ import type { Json, JsonRpcParams, JsonRpcRequest, PendingJsonRpcResponse } from "@metamask/utils";
1
3
  import type { CaveatConstraint, CaveatSpecificationConstraint, CaveatSpecificationMap } from "./Caveat.mjs";
2
4
  import type { PermissionConstraint, PermissionSpecificationConstraint, PermissionSpecificationMap } from "./Permission.mjs";
3
5
  export declare enum MethodNames {
@@ -14,6 +16,27 @@ export declare enum MethodNames {
14
16
  * whose specification type union to extract.
15
17
  */
16
18
  export type ExtractSpecifications<SpecificationsMap extends CaveatSpecificationMap<CaveatSpecificationConstraint> | PermissionSpecificationMap<PermissionSpecificationConstraint>> = SpecificationsMap[keyof SpecificationsMap];
19
+ /**
20
+ * A middleware function for handling a permitted method.
21
+ */
22
+ export type HandlerMiddlewareFunction<Hooks, Params extends JsonRpcParams, Result extends Json> = (req: JsonRpcRequest<Params>, res: PendingJsonRpcResponse<Result>, next: JsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, hooks: Hooks) => void | Promise<void>;
23
+ /**
24
+ * We use a mapped object type in order to create a type that requires the
25
+ * presence of the names of all hooks for the given handler.
26
+ * This can then be used to select only the necessary hooks whenever a method
27
+ * is called for purposes of POLA.
28
+ */
29
+ export type HookNames<HookMap> = {
30
+ [Property in keyof HookMap]: true;
31
+ };
32
+ /**
33
+ * A handler for a permitted method.
34
+ */
35
+ export type PermittedHandlerExport<Hooks, Params extends JsonRpcParams, Result extends Json> = {
36
+ implementation: HandlerMiddlewareFunction<Hooks, Params, Result>;
37
+ hookNames: HookNames<Hooks>;
38
+ methodNames: string[];
39
+ };
17
40
  /**
18
41
  * Given two permission objects, computes 3 sets:
19
42
  * - The set of caveat pairs that are common to both permissions.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.mts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACvB,qBAAiB;AAClB,OAAO,KAAK,EACV,oBAAoB,EACpB,iCAAiC,EACjC,0BAA0B,EAC3B,yBAAqB;AAEtB,oBAAY,WAAW;IACrB,kBAAkB,8BAA8B;IAChD,cAAc,0BAA0B;IACxC,iBAAiB,6BAA6B;CAC/C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,CAC/B,iBAAiB,SACb,sBAAsB,CAAC,6BAA6B,CAAC,GACrD,0BAA0B,CAAC,iCAAiC,CAAC,IAC/D,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAE/C;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,EACzD,eAAe,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC7C;IACD,WAAW,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;IACpD,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;CACxC,CAwBA"}
1
+ {"version":3,"file":"utils.d.mts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,yBAAyB,EAC1B,kCAAkC;AACnC,OAAO,KAAK,EACV,IAAI,EACJ,aAAa,EACb,cAAc,EACd,sBAAsB,EACvB,wBAAwB;AAEzB,OAAO,KAAK,EACV,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACvB,qBAAiB;AAClB,OAAO,KAAK,EACV,oBAAoB,EACpB,iCAAiC,EACjC,0BAA0B,EAC3B,yBAAqB;AAEtB,oBAAY,WAAW;IACrB,kBAAkB,8BAA8B;IAChD,cAAc,0BAA0B;IACxC,iBAAiB,6BAA6B;CAC/C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,CAC/B,iBAAiB,SACb,sBAAsB,CAAC,6BAA6B,CAAC,GACrD,0BAA0B,CAAC,iCAAiC,CAAC,IAC/D,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,CAAC;AAE/C;;GAEG;AACH,MAAM,MAAM,yBAAyB,CACnC,KAAK,EACL,MAAM,SAAS,aAAa,EAC5B,MAAM,SAAS,IAAI,IACjB,CACF,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,EAC3B,GAAG,EAAE,sBAAsB,CAAC,MAAM,CAAC,EACnC,IAAI,EAAE,yBAAyB,EAC/B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,EAAE,KAAK,KACT,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,MAAM,SAAS,CAAC,OAAO,IAAI;KAC9B,QAAQ,IAAI,MAAM,OAAO,GAAG,IAAI;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,sBAAsB,CAChC,KAAK,EACL,MAAM,SAAS,aAAa,EAC5B,MAAM,SAAS,IAAI,IACjB;IACF,cAAc,EAAE,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC3C,cAAc,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,SAAS,EACzD,eAAe,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAC7C;IACD,WAAW,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,EAAE,CAAC;IACpD,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;CACxC,CAwBA"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAWA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,+DAAgD,CAAA;IAChD,uDAAwC,CAAA;IACxC,6DAA8C,CAAA;AAChD,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAgBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAC3C,cAAyD,EACzD,eAA8C;IAM9C,MAAM,WAAW,GAAG,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IACjD,MAAM,WAAW,GAA2C,EAAE,CAAC;IAE/D,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,MAAM,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAC7C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CACtD,CAAC;QAEF,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5B,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC/D,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,iBAAiB;QACjB,kBAAkB,EAAE,CAAC,GAAG,YAAY,CAAC;KACtC,CAAC;AACJ,CAAC","sourcesContent":["import 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 * 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 caveatPairs: [CaveatConstraint, CaveatConstraint][];\n leftUniqueCaveats: CaveatConstraint[];\n rightUniqueCaveats: CaveatConstraint[];\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"]}
1
+ {"version":3,"file":"utils.mjs","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,+DAAgD,CAAA;IAChD,uDAAwC,CAAA;IACxC,6DAA8C,CAAA;AAChD,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAsDD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,6BAA6B,CAC3C,cAAyD,EACzD,eAA8C;IAM9C,MAAM,WAAW,GAAG,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5D,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IACjD,MAAM,WAAW,GAA2C,EAAE,CAAC;IAE/D,WAAW,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;QACjC,MAAM,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAC7C,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,CACtD,CAAC;QAEF,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC;YAC5B,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YAC/D,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,WAAW;QACX,iBAAiB;QACjB,kBAAkB,EAAE,CAAC,GAAG,YAAY,CAAC;KACtC,CAAC;AACJ,CAAC","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 caveatPairs: [CaveatConstraint, CaveatConstraint][];\n leftUniqueCaveats: CaveatConstraint[];\n rightUniqueCaveats: CaveatConstraint[];\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamask-previews/permission-controller",
3
- "version": "12.3.0-preview-45a82ea8e",
3
+ "version": "12.3.0-preview-d8ff44d",
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
  "Ethereum",
@@ -57,7 +57,7 @@
57
57
  "@metamask/base-controller": "^9.1.0",
58
58
  "@metamask/controller-utils": "^11.20.0",
59
59
  "@metamask/json-rpc-engine": "^10.2.4",
60
- "@metamask/messenger": "^1.1.1",
60
+ "@metamask/messenger": "^1.2.0",
61
61
  "@metamask/rpc-errors": "^7.0.2",
62
62
  "@metamask/utils": "^11.9.0",
63
63
  "@types/deep-freeze-strict": "^1.1.0",