@metamask-previews/json-rpc-engine 10.2.4-preview-7a471e191 → 10.2.4-preview-6ce5d58fa
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 +1 -3
- package/dist/v2/index.cjs +1 -4
- package/dist/v2/index.cjs.map +1 -1
- package/dist/v2/index.d.cts +0 -2
- package/dist/v2/index.d.cts.map +1 -1
- package/dist/v2/index.d.mts +0 -2
- package/dist/v2/index.d.mts.map +1 -1
- package/dist/v2/index.mjs +0 -1
- package/dist/v2/index.mjs.map +1 -1
- package/package.json +1 -2
- package/dist/v2/createMethodMiddleware.cjs +0 -67
- package/dist/v2/createMethodMiddleware.cjs.map +0 -1
- package/dist/v2/createMethodMiddleware.d.cts +0 -74
- package/dist/v2/createMethodMiddleware.d.cts.map +0 -1
- package/dist/v2/createMethodMiddleware.d.mts +0 -74
- package/dist/v2/createMethodMiddleware.d.mts.map +0 -1
- package/dist/v2/createMethodMiddleware.mjs +0 -62
- package/dist/v2/createMethodMiddleware.mjs.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,9 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
9
9
|
|
|
10
10
|
### Added
|
|
11
11
|
|
|
12
|
-
- Add `createOriginMiddleware` utility
|
|
13
|
-
- Add `createMethodMiddleware` utility to `v2` ([#8506](https://github.com/MetaMask/core/pull/8506))
|
|
14
|
-
- This utility allows JSON-RPC method implementations to use both the hooks pattern and the messenger.
|
|
12
|
+
- Add `createOriginMiddleware` utility ([#8522](https://github.com/MetaMask/core/pull/8522))
|
|
15
13
|
|
|
16
14
|
## [10.2.4]
|
|
17
15
|
|
package/dist/v2/index.cjs
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.JsonRpcEngineError = exports.isRequest = exports.isNotification = exports.MiddlewareContext = exports.JsonRpcServer = exports.JsonRpcEngineV2 = exports.createScaffoldMiddleware = exports.createOriginMiddleware = exports.
|
|
3
|
+
exports.JsonRpcEngineError = exports.isRequest = exports.isNotification = exports.MiddlewareContext = exports.JsonRpcServer = exports.JsonRpcEngineV2 = exports.createScaffoldMiddleware = exports.createOriginMiddleware = exports.getUniqueId = exports.asLegacyMiddleware = void 0;
|
|
4
4
|
var asLegacyMiddleware_1 = require("./asLegacyMiddleware.cjs");
|
|
5
5
|
Object.defineProperty(exports, "asLegacyMiddleware", { enumerable: true, get: function () { return asLegacyMiddleware_1.asLegacyMiddleware; } });
|
|
6
6
|
var getUniqueId_1 = require("../getUniqueId.cjs");
|
|
7
7
|
Object.defineProperty(exports, "getUniqueId", { enumerable: true, get: function () { return getUniqueId_1.getUniqueId; } });
|
|
8
|
-
var createMethodMiddleware_1 = require("./createMethodMiddleware.cjs");
|
|
9
|
-
Object.defineProperty(exports, "selectHooks", { enumerable: true, get: function () { return createMethodMiddleware_1.selectHooks; } });
|
|
10
|
-
Object.defineProperty(exports, "createMethodMiddleware", { enumerable: true, get: function () { return createMethodMiddleware_1.createMethodMiddleware; } });
|
|
11
8
|
var createOriginMiddleware_1 = require("./createOriginMiddleware.cjs");
|
|
12
9
|
Object.defineProperty(exports, "createOriginMiddleware", { enumerable: true, get: function () { return createOriginMiddleware_1.createOriginMiddleware; } });
|
|
13
10
|
var createScaffoldMiddleware_1 = require("./createScaffoldMiddleware.cjs");
|
package/dist/v2/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":";;;AAAA,+DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,kDAA6C;AAApC,0GAAA,WAAW,OAAA;AACpB,
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":";;;AAAA,+DAA0D;AAAjD,wHAAA,kBAAkB,OAAA;AAC3B,kDAA6C;AAApC,0GAAA,WAAW,OAAA;AACpB,uEAAkE;AAAzD,gIAAA,sBAAsB,OAAA;AAC/B,2EAAsE;AAA7D,oIAAA,wBAAwB,OAAA;AACjC,yDAAoD;AAA3C,kHAAA,eAAe,OAAA;AAWxB,qDAAgD;AAAvC,8GAAA,aAAa,OAAA;AACtB,6DAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAE1B,qCAAwE;AAA/D,uGAAA,cAAc,OAAA;AAAE,kGAAA,SAAS,OAAA;AAAE,2GAAA,kBAAkB,OAAA","sourcesContent":["export { asLegacyMiddleware } from './asLegacyMiddleware';\nexport { getUniqueId } from '../getUniqueId';\nexport { createOriginMiddleware } from './createOriginMiddleware';\nexport { createScaffoldMiddleware } from './createScaffoldMiddleware';\nexport { JsonRpcEngineV2 } from './JsonRpcEngineV2';\nexport type {\n JsonRpcMiddleware,\n HandleOptions,\n MergedContextOf,\n MiddlewareParams,\n MiddlewareConstraint,\n Next,\n RequestOf,\n ResultConstraint,\n} from './JsonRpcEngineV2';\nexport { JsonRpcServer } from './JsonRpcServer';\nexport { MiddlewareContext } from './MiddlewareContext';\nexport type { EmptyContext, ContextConstraint } from './MiddlewareContext';\nexport { isNotification, isRequest, JsonRpcEngineError } from './utils';\nexport type {\n Json,\n JsonRpcCall,\n JsonRpcNotification,\n JsonRpcParams,\n JsonRpcRequest,\n} from './utils';\n"]}
|
package/dist/v2/index.d.cts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export { asLegacyMiddleware } from "./asLegacyMiddleware.cjs";
|
|
2
2
|
export { getUniqueId } from "../getUniqueId.cjs";
|
|
3
|
-
export { selectHooks, createMethodMiddleware } from "./createMethodMiddleware.cjs";
|
|
4
|
-
export type { MethodHandler } from "./createMethodMiddleware.cjs";
|
|
5
3
|
export { createOriginMiddleware } from "./createOriginMiddleware.cjs";
|
|
6
4
|
export { createScaffoldMiddleware } from "./createScaffoldMiddleware.cjs";
|
|
7
5
|
export { JsonRpcEngineV2 } from "./JsonRpcEngineV2.cjs";
|
package/dist/v2/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,WAAW,EAAE,2BAAuB;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,WAAW,EAAE,2BAAuB;AAC7C,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAClE,OAAO,EAAE,wBAAwB,EAAE,uCAAmC;AACtE,OAAO,EAAE,eAAe,EAAE,8BAA0B;AACpD,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,IAAI,EACJ,SAAS,EACT,gBAAgB,GACjB,8BAA0B;AAC3B,OAAO,EAAE,aAAa,EAAE,4BAAwB;AAChD,OAAO,EAAE,iBAAiB,EAAE,gCAA4B;AACxD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,gCAA4B;AAC3E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,EAAE,oBAAgB;AACxE,YAAY,EACV,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,oBAAgB"}
|
package/dist/v2/index.d.mts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
export { asLegacyMiddleware } from "./asLegacyMiddleware.mjs";
|
|
2
2
|
export { getUniqueId } from "../getUniqueId.mjs";
|
|
3
|
-
export { selectHooks, createMethodMiddleware } from "./createMethodMiddleware.mjs";
|
|
4
|
-
export type { MethodHandler } from "./createMethodMiddleware.mjs";
|
|
5
3
|
export { createOriginMiddleware } from "./createOriginMiddleware.mjs";
|
|
6
4
|
export { createScaffoldMiddleware } from "./createScaffoldMiddleware.mjs";
|
|
7
5
|
export { JsonRpcEngineV2 } from "./JsonRpcEngineV2.mjs";
|
package/dist/v2/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,WAAW,EAAE,2BAAuB;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,WAAW,EAAE,2BAAuB;AAC7C,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAClE,OAAO,EAAE,wBAAwB,EAAE,uCAAmC;AACtE,OAAO,EAAE,eAAe,EAAE,8BAA0B;AACpD,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,IAAI,EACJ,SAAS,EACT,gBAAgB,GACjB,8BAA0B;AAC3B,OAAO,EAAE,aAAa,EAAE,4BAAwB;AAChD,OAAO,EAAE,iBAAiB,EAAE,gCAA4B;AACxD,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,gCAA4B;AAC3E,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,EAAE,oBAAgB;AACxE,YAAY,EACV,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,cAAc,GACf,oBAAgB"}
|
package/dist/v2/index.mjs
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
export { asLegacyMiddleware } from "./asLegacyMiddleware.mjs";
|
|
2
2
|
export { getUniqueId } from "../getUniqueId.mjs";
|
|
3
|
-
export { selectHooks, createMethodMiddleware } from "./createMethodMiddleware.mjs";
|
|
4
3
|
export { createOriginMiddleware } from "./createOriginMiddleware.mjs";
|
|
5
4
|
export { createScaffoldMiddleware } from "./createScaffoldMiddleware.mjs";
|
|
6
5
|
export { JsonRpcEngineV2 } from "./JsonRpcEngineV2.mjs";
|
package/dist/v2/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,WAAW,EAAE,2BAAuB;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/v2/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iCAA6B;AAC1D,OAAO,EAAE,WAAW,EAAE,2BAAuB;AAC7C,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAClE,OAAO,EAAE,wBAAwB,EAAE,uCAAmC;AACtE,OAAO,EAAE,eAAe,EAAE,8BAA0B;AAWpD,OAAO,EAAE,aAAa,EAAE,4BAAwB;AAChD,OAAO,EAAE,iBAAiB,EAAE,gCAA4B;AAExD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,kBAAkB,EAAE,oBAAgB","sourcesContent":["export { asLegacyMiddleware } from './asLegacyMiddleware';\nexport { getUniqueId } from '../getUniqueId';\nexport { createOriginMiddleware } from './createOriginMiddleware';\nexport { createScaffoldMiddleware } from './createScaffoldMiddleware';\nexport { JsonRpcEngineV2 } from './JsonRpcEngineV2';\nexport type {\n JsonRpcMiddleware,\n HandleOptions,\n MergedContextOf,\n MiddlewareParams,\n MiddlewareConstraint,\n Next,\n RequestOf,\n ResultConstraint,\n} from './JsonRpcEngineV2';\nexport { JsonRpcServer } from './JsonRpcServer';\nexport { MiddlewareContext } from './MiddlewareContext';\nexport type { EmptyContext, ContextConstraint } from './MiddlewareContext';\nexport { isNotification, isRequest, JsonRpcEngineError } from './utils';\nexport type {\n Json,\n JsonRpcCall,\n JsonRpcNotification,\n JsonRpcParams,\n JsonRpcRequest,\n} from './utils';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/json-rpc-engine",
|
|
3
|
-
"version": "10.2.4-preview-
|
|
3
|
+
"version": "10.2.4-preview-6ce5d58fa",
|
|
4
4
|
"description": "A tool for processing JSON-RPC messages",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|
|
@@ -70,7 +70,6 @@
|
|
|
70
70
|
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@metamask/messenger": "^1.1.1",
|
|
74
73
|
"@metamask/rpc-errors": "^7.0.2",
|
|
75
74
|
"@metamask/safe-event-emitter": "^3.0.0",
|
|
76
75
|
"@metamask/utils": "^11.9.0",
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.selectHooks = exports.createMethodMiddleware = void 0;
|
|
4
|
-
const messenger_1 = require("@metamask/messenger");
|
|
5
|
-
/**
|
|
6
|
-
* Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.
|
|
7
|
-
*
|
|
8
|
-
* @param options The options.
|
|
9
|
-
* @param options.handlers - The JSON-RPC method handler implementations.
|
|
10
|
-
* @param options.messenger - The messenger to be used by the handlers.
|
|
11
|
-
* @param options.hooks - The hooks to be used by the handlers.
|
|
12
|
-
* @returns A JsonRpcEngineV2 middleware.
|
|
13
|
-
*/
|
|
14
|
-
function createMethodMiddleware(options) {
|
|
15
|
-
const { messenger: rootMessenger } = options;
|
|
16
|
-
const allHooks = options.hooks;
|
|
17
|
-
const handlers = Object.entries(options.handlers).reduce((accumulator, [handlerName, handler]) => {
|
|
18
|
-
const handlerHooks = selectHooks(allHooks, handler.hookNames) ?? {};
|
|
19
|
-
const handlerMessenger = new messenger_1.Messenger({
|
|
20
|
-
namespace: handlerName,
|
|
21
|
-
parent: rootMessenger,
|
|
22
|
-
});
|
|
23
|
-
rootMessenger.delegate({
|
|
24
|
-
actions: (handler.actionNames ?? []),
|
|
25
|
-
messenger: handlerMessenger,
|
|
26
|
-
});
|
|
27
|
-
accumulator[handlerName] = {
|
|
28
|
-
implementation: handler.implementation,
|
|
29
|
-
hooks: handlerHooks,
|
|
30
|
-
messenger: handlerMessenger,
|
|
31
|
-
};
|
|
32
|
-
return accumulator;
|
|
33
|
-
}, {});
|
|
34
|
-
return ({ request, context, next }) => {
|
|
35
|
-
const handler = handlers[request.method];
|
|
36
|
-
if (handler === undefined) {
|
|
37
|
-
return next();
|
|
38
|
-
}
|
|
39
|
-
const { implementation, hooks, messenger } = handler;
|
|
40
|
-
return implementation({ request, context, next, hooks, messenger });
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
exports.createMethodMiddleware = createMethodMiddleware;
|
|
44
|
-
/**
|
|
45
|
-
* Returns the subset of the specified `hooks` that are included in the
|
|
46
|
-
* `hookNames` object. This is a Principle of Least Authority (POLA) measure
|
|
47
|
-
* to ensure that each RPC method implementation only has access to the
|
|
48
|
-
* API "hooks" it needs to do its job.
|
|
49
|
-
*
|
|
50
|
-
* @param hooks - The hooks to select from.
|
|
51
|
-
* @param hookNames - The names of the hooks to select.
|
|
52
|
-
* @returns The selected hooks.
|
|
53
|
-
* @template Hooks - The hooks to select from.
|
|
54
|
-
* @template HookName - The names of the hooks to select.
|
|
55
|
-
*/
|
|
56
|
-
function selectHooks(hooks, hookNames) {
|
|
57
|
-
if (hookNames) {
|
|
58
|
-
return Object.keys(hookNames).reduce((hookSubset, _hookName) => {
|
|
59
|
-
const hookName = _hookName;
|
|
60
|
-
hookSubset[hookName] = hooks[hookName];
|
|
61
|
-
return hookSubset;
|
|
62
|
-
}, {});
|
|
63
|
-
}
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
exports.selectHooks = selectHooks;
|
|
67
|
-
//# sourceMappingURL=createMethodMiddleware.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMethodMiddleware.cjs","sourceRoot":"","sources":["../../src/v2/createMethodMiddleware.ts"],"names":[],"mappings":";;;AAAA,mDAAkE;AA8ElE;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CAIpC,OAAgD;IAEhD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAgC,CAAC;IAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAEtD,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,gBAAgB,GAAG,IAAI,qBAAS,CAKpC;YACA,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,aAAa,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAExB;YACX,SAAS,EAAE,gBAAgB;SAC5B,CAAC,CAAC;QAEH,WAAW,CAAC,WAAW,CAAC,GAAG;YACzB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,gBAAgB;SAC5B,CAAC;QACF,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAErD,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAhDD,wDAgDC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,WAAW,CAIzB,KAAY,EACZ,SAAkC;IAElC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAClC,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,SAAqB,CAAC;YACvC,UAAU,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvC,OAAO,UAAU,CAAC;QACpB,CAAC,EACD,EAAE,CACsB,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAlBD,kCAkBC","sourcesContent":["import { ActionConstraint, Messenger } from '@metamask/messenger';\n\nimport { JsonRpcMiddleware, Next } from './JsonRpcEngineV2';\nimport { ContextConstraint } from './MiddlewareContext';\nimport {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n UnionToIntersection,\n} from './utils';\n\n// The helpers below seem excessive, but they are required for inference of hooks/actions.\ntype HandlerActions<Handler> = Handler extends {\n implementation: (options: infer Options) => unknown;\n}\n ? Options extends { messenger: Messenger<string, infer Actions> }\n ? Actions\n : never\n : never;\n\ntype HandlerHooks<Handler> = Handler extends {\n implementation: (options: infer Options) => unknown;\n}\n ? Options extends { hooks: infer Hooks }\n ? Hooks\n : never\n : never;\n\nexport type MethodHandler<\n Hooks extends Record<string, unknown> = never,\n MessengerActions extends ActionConstraint = never,\n Parameters extends JsonRpcParams = JsonRpcParams,\n Result extends Json = Json,\n Context extends ContextConstraint = ContextConstraint,\n> = {\n implementation: (options: {\n request: Readonly<JsonRpcRequest<Parameters>>;\n context: Context;\n next: Next<JsonRpcRequest>;\n messenger: Messenger<string, MessengerActions>;\n hooks: Hooks;\n }) => Promise<Result> | Result;\n} & ([Hooks] extends [never]\n ? { hookNames?: undefined }\n : { hookNames: { [Key in keyof Hooks]: true } }) &\n ([MessengerActions] extends [never]\n ? { actionNames?: undefined }\n : { actionNames: MessengerActions['type'][] });\n\ntype AnyMethodHandler = {\n implementation(\n this: void,\n options: {\n request: Readonly<JsonRpcRequest>;\n context: ContextConstraint;\n next: Next<JsonRpcRequest>;\n messenger: unknown;\n hooks: unknown;\n },\n ): Promise<Json> | Json;\n hookNames?: Record<string, true>;\n actionNames?: readonly string[];\n};\n\nexport type CreateMethodMiddlewareOptions<\n Handlers extends Record<string, AnyMethodHandler>,\n> = {\n handlers: Handlers;\n messenger: Messenger<string, HandlerActions<Handlers[keyof Handlers]>>;\n hooks: UnionToIntersection<HandlerHooks<Handlers[keyof Handlers]>>;\n};\n\ntype ResolvedHandler = {\n implementation: AnyMethodHandler['implementation'];\n hooks: Record<string, unknown>;\n messenger: Messenger<string, ActionConstraint>;\n};\n\n/**\n * Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.\n *\n * @param options The options.\n * @param options.handlers - The JSON-RPC method handler implementations.\n * @param options.messenger - The messenger to be used by the handlers.\n * @param options.hooks - The hooks to be used by the handlers.\n * @returns A JsonRpcEngineV2 middleware.\n */\nexport function createMethodMiddleware<\n Handlers extends Record<string, AnyMethodHandler>,\n Context extends ContextConstraint,\n>(\n options: CreateMethodMiddlewareOptions<Handlers>,\n): JsonRpcMiddleware<JsonRpcRequest, Json, Context> {\n const { messenger: rootMessenger } = options;\n const allHooks = options.hooks as Record<string, unknown>;\n\n const handlers = Object.entries(options.handlers).reduce<\n Record<string, ResolvedHandler>\n >((accumulator, [handlerName, handler]) => {\n const handlerHooks = selectHooks(allHooks, handler.hookNames) ?? {};\n const handlerMessenger = new Messenger<\n string,\n HandlerActions<Handlers[keyof Handlers]>,\n never,\n typeof rootMessenger\n >({\n namespace: handlerName,\n parent: rootMessenger,\n });\n\n rootMessenger.delegate({\n actions: (handler.actionNames ?? []) as HandlerActions<\n Handlers[keyof Handlers]\n >['type'][],\n messenger: handlerMessenger,\n });\n\n accumulator[handlerName] = {\n implementation: handler.implementation,\n hooks: handlerHooks,\n messenger: handlerMessenger,\n };\n return accumulator;\n }, {});\n\n return ({ request, context, next }) => {\n const handler = handlers[request.method];\n if (handler === undefined) {\n return next();\n }\n\n const { implementation, hooks, messenger } = handler;\n\n return implementation({ request, context, next, hooks, messenger });\n };\n}\n\n/**\n * Returns the subset of the specified `hooks` that are included in the\n * `hookNames` object. This is a Principle of Least Authority (POLA) measure\n * to ensure that each RPC method implementation only has access to the\n * API \"hooks\" it needs to do its job.\n *\n * @param hooks - The hooks to select from.\n * @param hookNames - The names of the hooks to select.\n * @returns The selected hooks.\n * @template Hooks - The hooks to select from.\n * @template HookName - The names of the hooks to select.\n */\nexport function selectHooks<\n Hooks extends Record<string, unknown>,\n HookName extends keyof Hooks,\n>(\n hooks: Hooks,\n hookNames?: Record<HookName, true>,\n): Pick<Hooks, HookName> | undefined {\n if (hookNames) {\n return Object.keys(hookNames).reduce<Partial<Pick<Hooks, HookName>>>(\n (hookSubset, _hookName) => {\n const hookName = _hookName as HookName;\n hookSubset[hookName] = hooks[hookName];\n return hookSubset;\n },\n {},\n ) as Pick<Hooks, HookName>;\n }\n return undefined;\n}\n"]}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ActionConstraint, Messenger } from "@metamask/messenger";
|
|
2
|
-
import { JsonRpcMiddleware, Next } from "./JsonRpcEngineV2.cjs";
|
|
3
|
-
import { ContextConstraint } from "./MiddlewareContext.cjs";
|
|
4
|
-
import { Json, JsonRpcParams, JsonRpcRequest, UnionToIntersection } from "./utils.cjs";
|
|
5
|
-
type HandlerActions<Handler> = Handler extends {
|
|
6
|
-
implementation: (options: infer Options) => unknown;
|
|
7
|
-
} ? Options extends {
|
|
8
|
-
messenger: Messenger<string, infer Actions>;
|
|
9
|
-
} ? Actions : never : never;
|
|
10
|
-
type HandlerHooks<Handler> = Handler extends {
|
|
11
|
-
implementation: (options: infer Options) => unknown;
|
|
12
|
-
} ? Options extends {
|
|
13
|
-
hooks: infer Hooks;
|
|
14
|
-
} ? Hooks : never : never;
|
|
15
|
-
export type MethodHandler<Hooks extends Record<string, unknown> = never, MessengerActions extends ActionConstraint = never, Parameters extends JsonRpcParams = JsonRpcParams, Result extends Json = Json, Context extends ContextConstraint = ContextConstraint> = {
|
|
16
|
-
implementation: (options: {
|
|
17
|
-
request: Readonly<JsonRpcRequest<Parameters>>;
|
|
18
|
-
context: Context;
|
|
19
|
-
next: Next<JsonRpcRequest>;
|
|
20
|
-
messenger: Messenger<string, MessengerActions>;
|
|
21
|
-
hooks: Hooks;
|
|
22
|
-
}) => Promise<Result> | Result;
|
|
23
|
-
} & ([Hooks] extends [never] ? {
|
|
24
|
-
hookNames?: undefined;
|
|
25
|
-
} : {
|
|
26
|
-
hookNames: {
|
|
27
|
-
[Key in keyof Hooks]: true;
|
|
28
|
-
};
|
|
29
|
-
}) & ([MessengerActions] extends [never] ? {
|
|
30
|
-
actionNames?: undefined;
|
|
31
|
-
} : {
|
|
32
|
-
actionNames: MessengerActions['type'][];
|
|
33
|
-
});
|
|
34
|
-
type AnyMethodHandler = {
|
|
35
|
-
implementation(this: void, options: {
|
|
36
|
-
request: Readonly<JsonRpcRequest>;
|
|
37
|
-
context: ContextConstraint;
|
|
38
|
-
next: Next<JsonRpcRequest>;
|
|
39
|
-
messenger: unknown;
|
|
40
|
-
hooks: unknown;
|
|
41
|
-
}): Promise<Json> | Json;
|
|
42
|
-
hookNames?: Record<string, true>;
|
|
43
|
-
actionNames?: readonly string[];
|
|
44
|
-
};
|
|
45
|
-
export type CreateMethodMiddlewareOptions<Handlers extends Record<string, AnyMethodHandler>> = {
|
|
46
|
-
handlers: Handlers;
|
|
47
|
-
messenger: Messenger<string, HandlerActions<Handlers[keyof Handlers]>>;
|
|
48
|
-
hooks: UnionToIntersection<HandlerHooks<Handlers[keyof Handlers]>>;
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.
|
|
52
|
-
*
|
|
53
|
-
* @param options The options.
|
|
54
|
-
* @param options.handlers - The JSON-RPC method handler implementations.
|
|
55
|
-
* @param options.messenger - The messenger to be used by the handlers.
|
|
56
|
-
* @param options.hooks - The hooks to be used by the handlers.
|
|
57
|
-
* @returns A JsonRpcEngineV2 middleware.
|
|
58
|
-
*/
|
|
59
|
-
export declare function createMethodMiddleware<Handlers extends Record<string, AnyMethodHandler>, Context extends ContextConstraint>(options: CreateMethodMiddlewareOptions<Handlers>): JsonRpcMiddleware<JsonRpcRequest, Json, Context>;
|
|
60
|
-
/**
|
|
61
|
-
* Returns the subset of the specified `hooks` that are included in the
|
|
62
|
-
* `hookNames` object. This is a Principle of Least Authority (POLA) measure
|
|
63
|
-
* to ensure that each RPC method implementation only has access to the
|
|
64
|
-
* API "hooks" it needs to do its job.
|
|
65
|
-
*
|
|
66
|
-
* @param hooks - The hooks to select from.
|
|
67
|
-
* @param hookNames - The names of the hooks to select.
|
|
68
|
-
* @returns The selected hooks.
|
|
69
|
-
* @template Hooks - The hooks to select from.
|
|
70
|
-
* @template HookName - The names of the hooks to select.
|
|
71
|
-
*/
|
|
72
|
-
export declare function selectHooks<Hooks extends Record<string, unknown>, HookName extends keyof Hooks>(hooks: Hooks, hookNames?: Record<HookName, true>): Pick<Hooks, HookName> | undefined;
|
|
73
|
-
export {};
|
|
74
|
-
//# sourceMappingURL=createMethodMiddleware.d.cts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMethodMiddleware.d.cts","sourceRoot":"","sources":["../../src/v2/createMethodMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { ActionConstraint, Messenger } from "@metamask/messenger";
|
|
2
|
-
import { JsonRpcMiddleware, Next } from "./JsonRpcEngineV2.mjs";
|
|
3
|
-
import { ContextConstraint } from "./MiddlewareContext.mjs";
|
|
4
|
-
import { Json, JsonRpcParams, JsonRpcRequest, UnionToIntersection } from "./utils.mjs";
|
|
5
|
-
type HandlerActions<Handler> = Handler extends {
|
|
6
|
-
implementation: (options: infer Options) => unknown;
|
|
7
|
-
} ? Options extends {
|
|
8
|
-
messenger: Messenger<string, infer Actions>;
|
|
9
|
-
} ? Actions : never : never;
|
|
10
|
-
type HandlerHooks<Handler> = Handler extends {
|
|
11
|
-
implementation: (options: infer Options) => unknown;
|
|
12
|
-
} ? Options extends {
|
|
13
|
-
hooks: infer Hooks;
|
|
14
|
-
} ? Hooks : never : never;
|
|
15
|
-
export type MethodHandler<Hooks extends Record<string, unknown> = never, MessengerActions extends ActionConstraint = never, Parameters extends JsonRpcParams = JsonRpcParams, Result extends Json = Json, Context extends ContextConstraint = ContextConstraint> = {
|
|
16
|
-
implementation: (options: {
|
|
17
|
-
request: Readonly<JsonRpcRequest<Parameters>>;
|
|
18
|
-
context: Context;
|
|
19
|
-
next: Next<JsonRpcRequest>;
|
|
20
|
-
messenger: Messenger<string, MessengerActions>;
|
|
21
|
-
hooks: Hooks;
|
|
22
|
-
}) => Promise<Result> | Result;
|
|
23
|
-
} & ([Hooks] extends [never] ? {
|
|
24
|
-
hookNames?: undefined;
|
|
25
|
-
} : {
|
|
26
|
-
hookNames: {
|
|
27
|
-
[Key in keyof Hooks]: true;
|
|
28
|
-
};
|
|
29
|
-
}) & ([MessengerActions] extends [never] ? {
|
|
30
|
-
actionNames?: undefined;
|
|
31
|
-
} : {
|
|
32
|
-
actionNames: MessengerActions['type'][];
|
|
33
|
-
});
|
|
34
|
-
type AnyMethodHandler = {
|
|
35
|
-
implementation(this: void, options: {
|
|
36
|
-
request: Readonly<JsonRpcRequest>;
|
|
37
|
-
context: ContextConstraint;
|
|
38
|
-
next: Next<JsonRpcRequest>;
|
|
39
|
-
messenger: unknown;
|
|
40
|
-
hooks: unknown;
|
|
41
|
-
}): Promise<Json> | Json;
|
|
42
|
-
hookNames?: Record<string, true>;
|
|
43
|
-
actionNames?: readonly string[];
|
|
44
|
-
};
|
|
45
|
-
export type CreateMethodMiddlewareOptions<Handlers extends Record<string, AnyMethodHandler>> = {
|
|
46
|
-
handlers: Handlers;
|
|
47
|
-
messenger: Messenger<string, HandlerActions<Handlers[keyof Handlers]>>;
|
|
48
|
-
hooks: UnionToIntersection<HandlerHooks<Handlers[keyof Handlers]>>;
|
|
49
|
-
};
|
|
50
|
-
/**
|
|
51
|
-
* Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.
|
|
52
|
-
*
|
|
53
|
-
* @param options The options.
|
|
54
|
-
* @param options.handlers - The JSON-RPC method handler implementations.
|
|
55
|
-
* @param options.messenger - The messenger to be used by the handlers.
|
|
56
|
-
* @param options.hooks - The hooks to be used by the handlers.
|
|
57
|
-
* @returns A JsonRpcEngineV2 middleware.
|
|
58
|
-
*/
|
|
59
|
-
export declare function createMethodMiddleware<Handlers extends Record<string, AnyMethodHandler>, Context extends ContextConstraint>(options: CreateMethodMiddlewareOptions<Handlers>): JsonRpcMiddleware<JsonRpcRequest, Json, Context>;
|
|
60
|
-
/**
|
|
61
|
-
* Returns the subset of the specified `hooks` that are included in the
|
|
62
|
-
* `hookNames` object. This is a Principle of Least Authority (POLA) measure
|
|
63
|
-
* to ensure that each RPC method implementation only has access to the
|
|
64
|
-
* API "hooks" it needs to do its job.
|
|
65
|
-
*
|
|
66
|
-
* @param hooks - The hooks to select from.
|
|
67
|
-
* @param hookNames - The names of the hooks to select.
|
|
68
|
-
* @returns The selected hooks.
|
|
69
|
-
* @template Hooks - The hooks to select from.
|
|
70
|
-
* @template HookName - The names of the hooks to select.
|
|
71
|
-
*/
|
|
72
|
-
export declare function selectHooks<Hooks extends Record<string, unknown>, HookName extends keyof Hooks>(hooks: Hooks, hookNames?: Record<HookName, true>): Pick<Hooks, HookName> | undefined;
|
|
73
|
-
export {};
|
|
74
|
-
//# sourceMappingURL=createMethodMiddleware.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMethodMiddleware.d.mts","sourceRoot":"","sources":["../../src/v2/createMethodMiddleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Messenger } from "@metamask/messenger";
|
|
2
|
-
/**
|
|
3
|
-
* Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.
|
|
4
|
-
*
|
|
5
|
-
* @param options The options.
|
|
6
|
-
* @param options.handlers - The JSON-RPC method handler implementations.
|
|
7
|
-
* @param options.messenger - The messenger to be used by the handlers.
|
|
8
|
-
* @param options.hooks - The hooks to be used by the handlers.
|
|
9
|
-
* @returns A JsonRpcEngineV2 middleware.
|
|
10
|
-
*/
|
|
11
|
-
export function createMethodMiddleware(options) {
|
|
12
|
-
const { messenger: rootMessenger } = options;
|
|
13
|
-
const allHooks = options.hooks;
|
|
14
|
-
const handlers = Object.entries(options.handlers).reduce((accumulator, [handlerName, handler]) => {
|
|
15
|
-
const handlerHooks = selectHooks(allHooks, handler.hookNames) ?? {};
|
|
16
|
-
const handlerMessenger = new Messenger({
|
|
17
|
-
namespace: handlerName,
|
|
18
|
-
parent: rootMessenger,
|
|
19
|
-
});
|
|
20
|
-
rootMessenger.delegate({
|
|
21
|
-
actions: (handler.actionNames ?? []),
|
|
22
|
-
messenger: handlerMessenger,
|
|
23
|
-
});
|
|
24
|
-
accumulator[handlerName] = {
|
|
25
|
-
implementation: handler.implementation,
|
|
26
|
-
hooks: handlerHooks,
|
|
27
|
-
messenger: handlerMessenger,
|
|
28
|
-
};
|
|
29
|
-
return accumulator;
|
|
30
|
-
}, {});
|
|
31
|
-
return ({ request, context, next }) => {
|
|
32
|
-
const handler = handlers[request.method];
|
|
33
|
-
if (handler === undefined) {
|
|
34
|
-
return next();
|
|
35
|
-
}
|
|
36
|
-
const { implementation, hooks, messenger } = handler;
|
|
37
|
-
return implementation({ request, context, next, hooks, messenger });
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Returns the subset of the specified `hooks` that are included in the
|
|
42
|
-
* `hookNames` object. This is a Principle of Least Authority (POLA) measure
|
|
43
|
-
* to ensure that each RPC method implementation only has access to the
|
|
44
|
-
* API "hooks" it needs to do its job.
|
|
45
|
-
*
|
|
46
|
-
* @param hooks - The hooks to select from.
|
|
47
|
-
* @param hookNames - The names of the hooks to select.
|
|
48
|
-
* @returns The selected hooks.
|
|
49
|
-
* @template Hooks - The hooks to select from.
|
|
50
|
-
* @template HookName - The names of the hooks to select.
|
|
51
|
-
*/
|
|
52
|
-
export function selectHooks(hooks, hookNames) {
|
|
53
|
-
if (hookNames) {
|
|
54
|
-
return Object.keys(hookNames).reduce((hookSubset, _hookName) => {
|
|
55
|
-
const hookName = _hookName;
|
|
56
|
-
hookSubset[hookName] = hooks[hookName];
|
|
57
|
-
return hookSubset;
|
|
58
|
-
}, {});
|
|
59
|
-
}
|
|
60
|
-
return undefined;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=createMethodMiddleware.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMethodMiddleware.mjs","sourceRoot":"","sources":["../../src/v2/createMethodMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,SAAS,EAAE,4BAA4B;AA8ElE;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAIpC,OAAgD;IAEhD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAgC,CAAC;IAE1D,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAEtD,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,EAAE;QACxC,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACpE,MAAM,gBAAgB,GAAG,IAAI,SAAS,CAKpC;YACA,SAAS,EAAE,WAAW;YACtB,MAAM,EAAE,aAAa;SACtB,CAAC,CAAC;QAEH,aAAa,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAExB;YACX,SAAS,EAAE,gBAAgB;SAC5B,CAAC,CAAC;QAEH,WAAW,CAAC,WAAW,CAAC,GAAG;YACzB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,KAAK,EAAE,YAAY;YACnB,SAAS,EAAE,gBAAgB;SAC5B,CAAC;QACF,OAAO,WAAW,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAErD,OAAO,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAIzB,KAAY,EACZ,SAAkC;IAElC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAClC,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,SAAqB,CAAC;YACvC,UAAU,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvC,OAAO,UAAU,CAAC;QACpB,CAAC,EACD,EAAE,CACsB,CAAC;IAC7B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["import { ActionConstraint, Messenger } from '@metamask/messenger';\n\nimport { JsonRpcMiddleware, Next } from './JsonRpcEngineV2';\nimport { ContextConstraint } from './MiddlewareContext';\nimport {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n UnionToIntersection,\n} from './utils';\n\n// The helpers below seem excessive, but they are required for inference of hooks/actions.\ntype HandlerActions<Handler> = Handler extends {\n implementation: (options: infer Options) => unknown;\n}\n ? Options extends { messenger: Messenger<string, infer Actions> }\n ? Actions\n : never\n : never;\n\ntype HandlerHooks<Handler> = Handler extends {\n implementation: (options: infer Options) => unknown;\n}\n ? Options extends { hooks: infer Hooks }\n ? Hooks\n : never\n : never;\n\nexport type MethodHandler<\n Hooks extends Record<string, unknown> = never,\n MessengerActions extends ActionConstraint = never,\n Parameters extends JsonRpcParams = JsonRpcParams,\n Result extends Json = Json,\n Context extends ContextConstraint = ContextConstraint,\n> = {\n implementation: (options: {\n request: Readonly<JsonRpcRequest<Parameters>>;\n context: Context;\n next: Next<JsonRpcRequest>;\n messenger: Messenger<string, MessengerActions>;\n hooks: Hooks;\n }) => Promise<Result> | Result;\n} & ([Hooks] extends [never]\n ? { hookNames?: undefined }\n : { hookNames: { [Key in keyof Hooks]: true } }) &\n ([MessengerActions] extends [never]\n ? { actionNames?: undefined }\n : { actionNames: MessengerActions['type'][] });\n\ntype AnyMethodHandler = {\n implementation(\n this: void,\n options: {\n request: Readonly<JsonRpcRequest>;\n context: ContextConstraint;\n next: Next<JsonRpcRequest>;\n messenger: unknown;\n hooks: unknown;\n },\n ): Promise<Json> | Json;\n hookNames?: Record<string, true>;\n actionNames?: readonly string[];\n};\n\nexport type CreateMethodMiddlewareOptions<\n Handlers extends Record<string, AnyMethodHandler>,\n> = {\n handlers: Handlers;\n messenger: Messenger<string, HandlerActions<Handlers[keyof Handlers]>>;\n hooks: UnionToIntersection<HandlerHooks<Handlers[keyof Handlers]>>;\n};\n\ntype ResolvedHandler = {\n implementation: AnyMethodHandler['implementation'];\n hooks: Record<string, unknown>;\n messenger: Messenger<string, ActionConstraint>;\n};\n\n/**\n * Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.\n *\n * @param options The options.\n * @param options.handlers - The JSON-RPC method handler implementations.\n * @param options.messenger - The messenger to be used by the handlers.\n * @param options.hooks - The hooks to be used by the handlers.\n * @returns A JsonRpcEngineV2 middleware.\n */\nexport function createMethodMiddleware<\n Handlers extends Record<string, AnyMethodHandler>,\n Context extends ContextConstraint,\n>(\n options: CreateMethodMiddlewareOptions<Handlers>,\n): JsonRpcMiddleware<JsonRpcRequest, Json, Context> {\n const { messenger: rootMessenger } = options;\n const allHooks = options.hooks as Record<string, unknown>;\n\n const handlers = Object.entries(options.handlers).reduce<\n Record<string, ResolvedHandler>\n >((accumulator, [handlerName, handler]) => {\n const handlerHooks = selectHooks(allHooks, handler.hookNames) ?? {};\n const handlerMessenger = new Messenger<\n string,\n HandlerActions<Handlers[keyof Handlers]>,\n never,\n typeof rootMessenger\n >({\n namespace: handlerName,\n parent: rootMessenger,\n });\n\n rootMessenger.delegate({\n actions: (handler.actionNames ?? []) as HandlerActions<\n Handlers[keyof Handlers]\n >['type'][],\n messenger: handlerMessenger,\n });\n\n accumulator[handlerName] = {\n implementation: handler.implementation,\n hooks: handlerHooks,\n messenger: handlerMessenger,\n };\n return accumulator;\n }, {});\n\n return ({ request, context, next }) => {\n const handler = handlers[request.method];\n if (handler === undefined) {\n return next();\n }\n\n const { implementation, hooks, messenger } = handler;\n\n return implementation({ request, context, next, hooks, messenger });\n };\n}\n\n/**\n * Returns the subset of the specified `hooks` that are included in the\n * `hookNames` object. This is a Principle of Least Authority (POLA) measure\n * to ensure that each RPC method implementation only has access to the\n * API \"hooks\" it needs to do its job.\n *\n * @param hooks - The hooks to select from.\n * @param hookNames - The names of the hooks to select.\n * @returns The selected hooks.\n * @template Hooks - The hooks to select from.\n * @template HookName - The names of the hooks to select.\n */\nexport function selectHooks<\n Hooks extends Record<string, unknown>,\n HookName extends keyof Hooks,\n>(\n hooks: Hooks,\n hookNames?: Record<HookName, true>,\n): Pick<Hooks, HookName> | undefined {\n if (hookNames) {\n return Object.keys(hookNames).reduce<Partial<Pick<Hooks, HookName>>>(\n (hookSubset, _hookName) => {\n const hookName = _hookName as HookName;\n hookSubset[hookName] = hooks[hookName];\n return hookSubset;\n },\n {},\n ) as Pick<Hooks, HookName>;\n }\n return undefined;\n}\n"]}
|