@metamask-previews/json-rpc-engine 10.2.4-preview-45a82ea8e → 10.2.4-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.
- package/CHANGELOG.md +5 -5
- package/dist/index.cjs +1 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +0 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +0 -1
- package/dist/index.mjs.map +1 -1
- package/dist/v2/createMethodMiddleware.cjs +31 -8
- package/dist/v2/createMethodMiddleware.cjs.map +1 -1
- package/dist/v2/createMethodMiddleware.d.cts +15 -12
- package/dist/v2/createMethodMiddleware.d.cts.map +1 -1
- package/dist/v2/createMethodMiddleware.d.mts +15 -12
- package/dist/v2/createMethodMiddleware.d.mts.map +1 -1
- package/dist/v2/createMethodMiddleware.mjs +28 -6
- package/dist/v2/createMethodMiddleware.mjs.map +1 -1
- package/dist/v2/index.cjs +2 -2
- package/dist/v2/index.cjs.map +1 -1
- package/dist/v2/index.d.cts +2 -2
- package/dist/v2/index.d.cts.map +1 -1
- package/dist/v2/index.d.mts +2 -2
- package/dist/v2/index.d.mts.map +1 -1
- package/dist/v2/index.mjs +2 -2
- package/dist/v2/index.mjs.map +1 -1
- package/dist/v2/utils.cjs +1 -76
- package/dist/v2/utils.cjs.map +1 -1
- package/dist/v2/utils.d.cts +0 -40
- package/dist/v2/utils.d.cts.map +1 -1
- package/dist/v2/utils.d.mts +0 -40
- package/dist/v2/utils.d.mts.map +1 -1
- package/dist/v2/utils.mjs +0 -72
- package/dist/v2/utils.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/createMethodMiddleware.cjs +0 -56
- package/dist/createMethodMiddleware.cjs.map +0 -1
- package/dist/createMethodMiddleware.d.cts +0 -79
- package/dist/createMethodMiddleware.d.cts.map +0 -1
- package/dist/createMethodMiddleware.d.mts +0 -79
- package/dist/createMethodMiddleware.d.mts.map +0 -1
- package/dist/createMethodMiddleware.mjs +0 -52
- package/dist/createMethodMiddleware.mjs.map +0 -1
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { rpcErrors } from "@metamask/rpc-errors";
|
|
2
|
-
import { assertExpectedHooks, createHandlerMessenger, selectHooks } from "./v2/utils.mjs";
|
|
3
|
-
/**
|
|
4
|
-
* Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.
|
|
5
|
-
*
|
|
6
|
-
* @deprecated Use the v2 `createMethodMiddleware` instead.
|
|
7
|
-
* @param options The options.
|
|
8
|
-
* @param options.handlers - The JSON-RPC method handler implementations.
|
|
9
|
-
* @param options.messenger - The messenger to be used by the handlers.
|
|
10
|
-
* @param options.hooks - The hooks to be used by the handlers.
|
|
11
|
-
* @returns A JsonRpcEngineV2 middleware.
|
|
12
|
-
*/
|
|
13
|
-
export function createMethodMiddleware(options) {
|
|
14
|
-
const { messenger: rootMessenger, onError } = options;
|
|
15
|
-
const allHooks = options.hooks;
|
|
16
|
-
const expectedHookNames = new Set(Object.values(options.handlers).flatMap((handler) => handler.hookNames ? Object.getOwnPropertyNames(handler.hookNames) : []));
|
|
17
|
-
assertExpectedHooks(allHooks, expectedHookNames);
|
|
18
|
-
const handlers = Object.entries(options.handlers).reduce((accumulator, [handlerName, handler]) => {
|
|
19
|
-
const handlerHooks = selectHooks(allHooks, handler.hookNames) ?? {};
|
|
20
|
-
const handlerMessenger = createHandlerMessenger({
|
|
21
|
-
namespace: handlerName,
|
|
22
|
-
actionNames: handler.actionNames,
|
|
23
|
-
rootMessenger,
|
|
24
|
-
});
|
|
25
|
-
accumulator[handlerName] = {
|
|
26
|
-
implementation: handler.implementation,
|
|
27
|
-
hooks: handlerHooks,
|
|
28
|
-
messenger: handlerMessenger,
|
|
29
|
-
};
|
|
30
|
-
return accumulator;
|
|
31
|
-
}, {});
|
|
32
|
-
// This should technically use createAsyncMiddleware, but we get around this by catching
|
|
33
|
-
// all handler errors.
|
|
34
|
-
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
35
|
-
return async (req, res, next, end) => {
|
|
36
|
-
const handler = handlers[req.method];
|
|
37
|
-
if (!handler) {
|
|
38
|
-
return next();
|
|
39
|
-
}
|
|
40
|
-
const { implementation, hooks: handlerHooks, messenger } = handler;
|
|
41
|
-
try {
|
|
42
|
-
return await implementation(req, res, next, end, handlerHooks, messenger);
|
|
43
|
-
}
|
|
44
|
-
catch (error) {
|
|
45
|
-
onError?.(error, req);
|
|
46
|
-
return end(error instanceof Error
|
|
47
|
-
? error
|
|
48
|
-
: rpcErrors.internal({ data: error }));
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
//# sourceMappingURL=createMethodMiddleware.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createMethodMiddleware.mjs","sourceRoot":"","sources":["../src/createMethodMiddleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,6BAA6B;AAajD,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,WAAW,EAEZ,uBAAmB;AA2HpB;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAGpC,OAAgD;IAEhD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAgC,CAAC;IAE1D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAClD,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CACvE,CACF,CAAC;IACF,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAEjD,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,sBAAsB,CAE7C;YACA,SAAS,EAAE,WAAW;YACtB,WAAW,EAAE,OAAO,CAAC,WAER;YACb,aAAa;SACd,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,wFAAwF;IACxF,sBAAsB;IACtB,kEAAkE;IAClE,OAAO,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QACnE,IAAI,CAAC;YACH,OAAO,MAAM,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtB,OAAO,GAAG,CACR,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,KAAa,EAAE,CAAC,CAChD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import type { ActionConstraint } from '@metamask/messenger';\nimport type { Messenger } from '@metamask/messenger';\nimport { rpcErrors } from '@metamask/rpc-errors';\nimport type {\n Json,\n JsonRpcParams,\n JsonRpcRequest,\n PendingJsonRpcResponse,\n} from '@metamask/utils';\n\nimport type {\n JsonRpcEngineEndCallback,\n JsonRpcEngineNextCallback,\n JsonRpcMiddleware,\n} from './JsonRpcEngine';\nimport {\n assertExpectedHooks,\n createHandlerMessenger,\n selectHooks,\n UnionToIntersection,\n} from './v2/utils';\n\ntype HandlerActions<Handler> = Handler extends {\n implementation: (...args: infer Args) => unknown;\n}\n ? Args extends [\n unknown,\n unknown,\n unknown,\n unknown,\n unknown,\n infer HandlerMessenger,\n ]\n ? HandlerMessenger extends Messenger<string, infer Actions>\n ? Actions\n : never\n : never\n : never;\n\ntype HandlerHooks<Handler> = Handler extends {\n implementation: (...args: infer Args) => unknown;\n}\n ? Args extends [unknown, unknown, unknown, unknown, infer ArgHooks, unknown]\n ? ArgHooks extends Record<string, unknown>\n ? ArgHooks\n : never\n : never\n : never;\n\n/**\n * A {@link MethodHandler} implementation.\n *\n * @deprecated Use the v2 `createMethodMiddleware` instead.\n */\nexport type MethodHandlerImplementation<\n Hooks extends Record<string, unknown> = never,\n MessengerActions extends ActionConstraint = never,\n Params extends JsonRpcParams = JsonRpcParams,\n Result extends Json = Json,\n RequestExtras extends Record<string, unknown> = Record<string, unknown>,\n> = (\n req: JsonRpcRequest<Params> & RequestExtras,\n res: PendingJsonRpcResponse<Result>,\n next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n hooks: Hooks,\n messenger: Messenger<string, MessengerActions>,\n) => Promise<void> | void;\n\n/**\n * A handler for {@link createMethodMiddleware}.\n *\n * @deprecated Use the v2 `createMethodMiddleware` instead.\n */\nexport type MethodHandler<\n Hooks extends Record<string, unknown> = never,\n MessengerActions extends ActionConstraint = never,\n Params extends JsonRpcParams = JsonRpcParams,\n Result extends Json = Json,\n RequestExtras extends Record<string, unknown> = Record<string, unknown>,\n> = {\n implementation: MethodHandlerImplementation<\n Hooks,\n MessengerActions,\n Params,\n Result,\n RequestExtras\n >;\n} & ([Hooks] extends [never]\n ? { hookNames?: undefined }\n : { hookNames: { [Key in keyof Hooks]: true } }) &\n ([MessengerActions] extends [never]\n ? { actionNames?: undefined }\n : { actionNames: readonly MessengerActions['type'][] });\n\ntype AnyMethodHandler = {\n implementation(\n this: void,\n req: JsonRpcRequest,\n res: PendingJsonRpcResponse,\n next: JsonRpcEngineNextCallback,\n end: JsonRpcEngineEndCallback,\n hooks: unknown,\n messenger: unknown,\n ): Promise<void> | void;\n hookNames?: Record<string, true>;\n actionNames?: readonly string[];\n};\n\ntype CreateMethodMiddlewareBaseOptions<\n Handlers extends Record<string, AnyMethodHandler>,\n> = {\n handlers: Handlers;\n hooks: UnionToIntersection<HandlerHooks<Handlers[keyof Handlers]>>;\n /**\n * Called when a handler throws, before the error is forwarded to `end`.\n * Intended for logging; must not throw.\n */\n onError?: (error: unknown, request: JsonRpcRequest) => void;\n};\n\n/**\n * Options for {@link createMethodMiddleware}.\n *\n * @deprecated Use the v2 `createMethodMiddleware` instead.\n */\nexport type CreateMethodMiddlewareOptions<\n Handlers extends Record<string, AnyMethodHandler>,\n> = CreateMethodMiddlewareBaseOptions<Handlers> &\n ([HandlerActions<Handlers[keyof Handlers]>] extends [never]\n ? {\n messenger?: undefined;\n }\n : {\n messenger: Messenger<string, HandlerActions<Handlers[keyof Handlers]>>;\n });\n\ntype ResolvedHandler = {\n implementation: AnyMethodHandler['implementation'];\n hooks: Record<string, unknown>;\n messenger?: Messenger<string, ActionConstraint> | undefined;\n};\n\n/**\n * Create a JSON-RPC middleware that handles the passed JSON-RPC method handlers using the messenger and hooks.\n *\n * @deprecated Use the v2 `createMethodMiddleware` instead.\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>(\n options: CreateMethodMiddlewareOptions<Handlers>,\n): JsonRpcMiddleware<JsonRpcParams, Json> {\n const { messenger: rootMessenger, onError } = options;\n const allHooks = options.hooks as Record<string, unknown>;\n\n const expectedHookNames = new Set(\n Object.values(options.handlers).flatMap((handler) =>\n handler.hookNames ? Object.getOwnPropertyNames(handler.hookNames) : [],\n ),\n );\n assertExpectedHooks(allHooks, expectedHookNames);\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 = createHandlerMessenger<\n HandlerActions<Handlers[keyof Handlers]>\n >({\n namespace: handlerName,\n actionNames: handler.actionNames as\n | readonly HandlerActions<Handlers[keyof Handlers]>['type'][]\n | undefined,\n rootMessenger,\n });\n\n accumulator[handlerName] = {\n implementation: handler.implementation,\n hooks: handlerHooks,\n messenger: handlerMessenger,\n };\n return accumulator;\n }, {});\n\n // This should technically use createAsyncMiddleware, but we get around this by catching\n // all handler errors.\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n return async (req, res, next, end) => {\n const handler = handlers[req.method];\n if (!handler) {\n return next();\n }\n\n const { implementation, hooks: handlerHooks, messenger } = handler;\n try {\n return await implementation(req, res, next, end, handlerHooks, messenger);\n } catch (error) {\n onError?.(error, req);\n return end(\n error instanceof Error\n ? error\n : rpcErrors.internal({ data: error as Json }),\n );\n }\n };\n}\n"]}
|