From da2611beb9bc37e30a833065390b05580d915f01 Mon Sep 17 00:00:00 2001 From: Erik Marks Date: Wed, 18 May 2022 00:28:32 -0700 Subject: [PATCH 1/7] Add DuplexJsonRpcEngine --- src/DuplexJsonRpcEngine.ts | 162 +++++++++++++++++++++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 src/DuplexJsonRpcEngine.ts diff --git a/src/DuplexJsonRpcEngine.ts b/src/DuplexJsonRpcEngine.ts new file mode 100644 index 0000000..27f7775 --- /dev/null +++ b/src/DuplexJsonRpcEngine.ts @@ -0,0 +1,162 @@ +import { + isJsonRpcRequest, + JsonRpcNotification, + JsonRpcRequest, + JsonRpcResponse, +} from '@metamask/utils'; +import { + JsonRpcEngine, + JsonRpcMiddleware, + JsonRpcNotificationHandler, +} from './JsonRpcEngine'; + +type HandleArgument = + | JsonRpcRequest + | JsonRpcNotification + | (JsonRpcRequest | JsonRpcNotification)[]; + +interface DuplexJsonRpcEngineArgs { + receiverNotificationHandler: JsonRpcNotificationHandler; + senderNotificationHandler: JsonRpcNotificationHandler; +} + +export class DuplexJsonRpcEngine { + readonly #receiver: JsonRpcEngine; + + readonly #sender: JsonRpcEngine; + + get receiver(): JsonRpcEngine { + return this.#receiver; + } + + get sender(): JsonRpcEngine { + return this.#sender; + } + + constructor({ + receiverNotificationHandler, + senderNotificationHandler, + }: DuplexJsonRpcEngineArgs) { + this.#receiver = new JsonRpcEngine({ + notificationHandler: receiverNotificationHandler, + }); + + this.#sender = new JsonRpcEngine({ + notificationHandler: senderNotificationHandler, + }); + } + + /** + * Add a middleware function to the receiving middleware stack. + * + * @param middleware - The middleware function to add. + */ + pushReceiverMiddleware( + middleware: JsonRpcMiddleware, + ): void { + this.#receiver.push(middleware as JsonRpcMiddleware); + } + + /** + * Add a middleware function to the sending middleware stack. + * + * @param middleware - The middleware function to add. + */ + pushSenderMiddleware(middleware: JsonRpcMiddleware): void { + this.#sender.push(middleware as JsonRpcMiddleware); + } + + /** + * Returns the receiving pipeline as a middleware function that can be pushed + * to other engines. + * + * @returns The receiving pipeline as a middleware function. + */ + receiverAsMiddleware(): JsonRpcMiddleware { + return this.#receiver.asMiddleware(); + } + + /** + * Returns the sending pipeline as a middleware function that can be pushed + * to other engines. + * + * @returns The sending pipeline as a middleware function. + */ + senderAsMiddleware(): JsonRpcMiddleware { + return this.#sender.asMiddleware(); + } + + /** + * Receive a JSON-RPC request, and return a response. + * + * @param request - The JSON-RPC request to receive. + * @returns The JSON-RPC response. + */ + receive( + request: JsonRpcRequest, + ): Promise>; + + /** + * Receive a JSON-RPC notification. + * + * @param notification - The notification to receive. + */ + receive(notification: JsonRpcNotification): Promise; + + /** + * Receive an array of JSON-RPC requests and/or notifications, and return an + * array of responses to any included requests. + * + * @param request - The JSON-RPC requests to receive. + * @returns An array of JSON-RPC responses. + */ + receive( + requests: (JsonRpcRequest | JsonRpcNotification)[], + ): Promise[]>; + + async receive(argument: HandleArgument) { + if (Array.isArray(argument)) { + return this.#receiver.handle(argument); + } else if (isJsonRpcRequest(argument)) { + return this.#receiver.handle(argument); + } + return this.#receiver.handle(argument); + } + + /** + * Send a JSON-RPC request, and receive a response. + * + * @param request - The JSON-RPC request to send. + * @returns The JSON-RPC response. + */ + send( + request: JsonRpcRequest, + ): Promise>; + + /** + * Send a JSON-RPC notification. + * + * @param notification - The notification to send. + */ + send(notification: JsonRpcNotification): Promise; + + /** + * Send an array of JSON-RPC requests and/or notifications, and receive an + * array of responses to any included requests. + * + * @param request - The JSON-RPC requests to send. + * @returns An array of JSON-RPC responses. + */ + send( + requests: (JsonRpcRequest | JsonRpcNotification)[], + ): Promise[]>; + + async send(argument: HandleArgument) { + if (Array.isArray(argument)) { + return this.#sender.handle(argument); + } else if (isJsonRpcRequest(argument)) { + return this.#sender.handle(argument); + } + return this.#sender.handle(argument); + } +} From de4cb6d75943ebc11a5cbebeca5dd208bcb8d5b3 Mon Sep 17 00:00:00 2001 From: Erik Marks Date: Fri, 15 Jul 2022 21:43:59 -0700 Subject: [PATCH 2/7] push -> addMiddleware --- src/DuplexJsonRpcEngine.ts | 4 +-- src/JsonRpcEngine.test.ts | 56 +++++++++++++++++++------------------- src/JsonRpcEngine.ts | 12 +++++++- 3 files changed, 41 insertions(+), 31 deletions(-) diff --git a/src/DuplexJsonRpcEngine.ts b/src/DuplexJsonRpcEngine.ts index 27f7775..b6b7127 100644 --- a/src/DuplexJsonRpcEngine.ts +++ b/src/DuplexJsonRpcEngine.ts @@ -54,7 +54,7 @@ export class DuplexJsonRpcEngine { pushReceiverMiddleware( middleware: JsonRpcMiddleware, ): void { - this.#receiver.push(middleware as JsonRpcMiddleware); + this.#receiver.addMiddleware(middleware as JsonRpcMiddleware); } /** @@ -63,7 +63,7 @@ export class DuplexJsonRpcEngine { * @param middleware - The middleware function to add. */ pushSenderMiddleware(middleware: JsonRpcMiddleware): void { - this.#sender.push(middleware as JsonRpcMiddleware); + this.#sender.addMiddleware(middleware as JsonRpcMiddleware); } /** diff --git a/src/JsonRpcEngine.test.ts b/src/JsonRpcEngine.test.ts index fe77684..1484f93 100644 --- a/src/JsonRpcEngine.test.ts +++ b/src/JsonRpcEngine.test.ts @@ -54,7 +54,7 @@ describe('JsonRpcEngine', () => { const middleware = jest.fn(); const notificationHandler = jest.fn(); const engine = new JsonRpcEngine({ notificationHandler }); - engine.push(middleware); + engine.addMiddleware(middleware); expect( await engine.handle({ jsonrpc, method: true } as any), @@ -72,7 +72,7 @@ describe('JsonRpcEngine', () => { }); const engine = new JsonRpcEngine(); - engine.push(middleware); + engine.addMiddleware(middleware); expect(await engine.handle({ jsonrpc, method: 'foo' })).toStrictEqual({ jsonrpc, @@ -86,7 +86,7 @@ describe('JsonRpcEngine', () => { const middleware = jest.fn(); const notificationHandler = jest.fn(); const engine = new JsonRpcEngine({ notificationHandler }); - engine.push(middleware); + engine.addMiddleware(middleware); expect(await engine.handle({ jsonrpc, method: 'foo' })).toBeUndefined(); expect(notificationHandler).toHaveBeenCalledTimes(1); @@ -137,7 +137,7 @@ describe('JsonRpcEngine', () => { it('handle: basic middleware test 1', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { response.result = 42; end(); }); @@ -157,7 +157,7 @@ describe('JsonRpcEngine', () => { it('handle: basic middleware test 2', async () => { const engine = new JsonRpcEngine(); - engine.push(function (request, response, _next, end) { + engine.addMiddleware(function (request, response, _next, end) { request.method = 'banana'; response.result = 42; end(); @@ -179,7 +179,7 @@ describe('JsonRpcEngine', () => { it('handle (async): basic middleware test', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { response.result = 42; end(); }); @@ -194,7 +194,7 @@ describe('JsonRpcEngine', () => { it('allow null result', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { response.result = null; end(); }); @@ -214,12 +214,12 @@ describe('JsonRpcEngine', () => { it('interacting middleware test', async () => { const engine = new JsonRpcEngine(); - engine.push(function (request: any, _response, next, _end) { + engine.addMiddleware(function (request: any, _response, next, _end) { request.resultShouldBe = 42; next(); }); - engine.push(function (request: any, response, _next, end) { + engine.addMiddleware(function (request: any, response, _next, end) { response.result = request.resultShouldBe; end(); }); @@ -239,12 +239,12 @@ describe('JsonRpcEngine', () => { it('middleware ending request before all middlewares applied', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { response.result = 42; end(); }); - engine.push(function (_request, _response, _next, _end) { + engine.addMiddleware(function (_request, _response, _next, _end) { throw new Error('Test should have ended already.'); }); @@ -263,7 +263,7 @@ describe('JsonRpcEngine', () => { it('erroring middleware test: end(error)', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, _response, _next, end) { + engine.addMiddleware(function (_request, _response, _next, end) { end(new Error('no bueno')); }); @@ -283,7 +283,7 @@ describe('JsonRpcEngine', () => { it('erroring middleware test: response.error -> next()', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response, next, _end) { + engine.addMiddleware(function (_request, response, next, _end) { response.error = rpcErrors.internal({ message: 'foobar' }); next(); }); @@ -304,7 +304,7 @@ describe('JsonRpcEngine', () => { it('erroring middleware test: response.error -> end()', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { response.error = rpcErrors.internal({ message: 'foobar' }); end(); }); @@ -325,7 +325,7 @@ describe('JsonRpcEngine', () => { it('erroring middleware test: non-function passsed to next()', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, _response, next, _end) { + engine.addMiddleware(function (_request, _response, next, _end) { next(true as any); }); @@ -364,7 +364,7 @@ describe('JsonRpcEngine', () => { it('handle: batch payloads', async () => { const engine = new JsonRpcEngine(); - engine.push(function (request, response, _next, end) { + engine.addMiddleware(function (request, response, _next, end) { if (request.id === 4) { delete response.result; response.error = rpcErrors.internal({ message: 'foobar' }); @@ -399,7 +399,7 @@ describe('JsonRpcEngine', () => { it('handle: batch payloads (async signature)', async () => { const engine = new JsonRpcEngine(); - engine.push(function (request, response, _next, end) { + engine.addMiddleware(function (request, response, _next, end) { if (request.id === 4) { delete response.result; response.error = rpcErrors.internal({ message: 'foobar' }); @@ -429,7 +429,7 @@ describe('JsonRpcEngine', () => { it('handle: batch payload with bad request object', async () => { const engine = new JsonRpcEngine(); - engine.push(function (request, response, _next, end) { + engine.addMiddleware(function (request, response, _next, end) { response.result = request.id; return end(); }); @@ -462,14 +462,14 @@ describe('JsonRpcEngine', () => { it('return handlers test', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response: any, next, _end) { + engine.addMiddleware(function (_request, response: any, next, _end) { next(function (callback) { response.sawReturnHandler = true; callback(); }); }); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { response.result = true; end(); }); @@ -491,7 +491,7 @@ describe('JsonRpcEngine', () => { const events: string[] = []; - engine.push(function (_request, _response, next, _end) { + engine.addMiddleware(function (_request, _response, next, _end) { events.push('1-next'); next(function (callback) { events.push('1-return'); @@ -499,7 +499,7 @@ describe('JsonRpcEngine', () => { }); }); - engine.push(function (_request, _response, next, _end) { + engine.addMiddleware(function (_request, _response, next, _end) { events.push('2-next'); next(function (callback) { events.push('2-return'); @@ -507,7 +507,7 @@ describe('JsonRpcEngine', () => { }); }); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { events.push('3-end'); response.result = true; end(); @@ -533,14 +533,14 @@ describe('JsonRpcEngine', () => { let sawNextReturnHandlerCalled = false; - engine.push(function (_request, _response, next, _end) { + engine.addMiddleware(function (_request, _response, next, _end) { next(function (callback) { sawNextReturnHandlerCalled = true; callback(); }); }); - engine.push(function (_request, _response, _next, end) { + engine.addMiddleware(function (_request, _response, _next, end) { end(new Error('boom')); }); @@ -558,13 +558,13 @@ describe('JsonRpcEngine', () => { it('handles error in next handler', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, _response, next, _end) { + engine.addMiddleware(function (_request, _response, next, _end) { next(function (_cb) { throw new Error('foo'); }); }); - engine.push(function (_request, response, _next, end) { + engine.addMiddleware(function (_request, response, _next, end) { response.result = 42; end(); }); @@ -583,7 +583,7 @@ describe('JsonRpcEngine', () => { it('handles failure to end request', async () => { const engine = new JsonRpcEngine(); - engine.push(function (_request, response, next, _end) { + engine.addMiddleware(function (_request, response, next, _end) { response.result = 42; next(); }); diff --git a/src/JsonRpcEngine.ts b/src/JsonRpcEngine.ts index c31421c..d7dfb43 100644 --- a/src/JsonRpcEngine.ts +++ b/src/JsonRpcEngine.ts @@ -129,13 +129,23 @@ export class JsonRpcEngine extends SafeEventEmitter { * * @param middleware - The middleware function to add. */ - push( + addMiddleware( middleware: JsonRpcMiddleware, ): void { this.#assertIsNotDestroyed(); this.#middleware.push(middleware as JsonRpcMiddleware); } + /** + * Add a middleware function to the engine's middleware stack. + * + * @deprecated Use {@link JsonRpcEngine.addMiddleware} instead. + * @param middleware - The middleware function to add. + */ + push(middleware: JsonRpcMiddleware): void { + return this.addMiddleware(middleware); + } + /** * Handle a JSON-RPC request, and return a response. * From 424f79402f259d63acdda2871c255b1f358b9b80 Mon Sep 17 00:00:00 2001 From: Erik Marks Date: Thu, 11 Aug 2022 23:56:45 -0700 Subject: [PATCH 3/7] Fix some comments --- src/DuplexJsonRpcEngine.ts | 8 ++++---- src/index.ts | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/DuplexJsonRpcEngine.ts b/src/DuplexJsonRpcEngine.ts index b6b7127..f9f18e4 100644 --- a/src/DuplexJsonRpcEngine.ts +++ b/src/DuplexJsonRpcEngine.ts @@ -51,7 +51,7 @@ export class DuplexJsonRpcEngine { * * @param middleware - The middleware function to add. */ - pushReceiverMiddleware( + addReceiverMiddleware( middleware: JsonRpcMiddleware, ): void { this.#receiver.addMiddleware(middleware as JsonRpcMiddleware); @@ -62,12 +62,12 @@ export class DuplexJsonRpcEngine { * * @param middleware - The middleware function to add. */ - pushSenderMiddleware(middleware: JsonRpcMiddleware): void { + addSenderMiddleware(middleware: JsonRpcMiddleware): void { this.#sender.addMiddleware(middleware as JsonRpcMiddleware); } /** - * Returns the receiving pipeline as a middleware function that can be pushed + * Returns the receiving pipeline as a middleware function that can be added * to other engines. * * @returns The receiving pipeline as a middleware function. @@ -77,7 +77,7 @@ export class DuplexJsonRpcEngine { } /** - * Returns the sending pipeline as a middleware function that can be pushed + * Returns the sending pipeline as a middleware function that can be added * to other engines. * * @returns The sending pipeline as a middleware function. diff --git a/src/index.ts b/src/index.ts index d7644d5..301dc32 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,3 +4,4 @@ export * from './getUniqueId'; export * from './idRemapMiddleware'; export * from './JsonRpcEngine'; export * from './mergeMiddleware'; +export * from './DuplexJsonRpcEngine'; From 73595ad30c9ece90535888688696a8d85ffc5757 Mon Sep 17 00:00:00 2001 From: Erik Marks Date: Fri, 12 Aug 2022 00:24:53 -0700 Subject: [PATCH 4/7] Add destroy method to DuplexJsonRpcEngine --- src/DuplexJsonRpcEngine.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/DuplexJsonRpcEngine.ts b/src/DuplexJsonRpcEngine.ts index f9f18e4..5adb0f4 100644 --- a/src/DuplexJsonRpcEngine.ts +++ b/src/DuplexJsonRpcEngine.ts @@ -159,4 +159,13 @@ export class DuplexJsonRpcEngine { } return this.#sender.handle(argument); } + + /** + * Destroys this engine and its sending and receiving middleware stacks. See + * {@link JsonRpcEngine.destroy} for details. + */ + destroy() { + this.#receiver.destroy(); + this.#sender.destroy(); + } } From a322b8d0fdbde41aec87dee64eccb1dd40ac3246 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Wed, 19 Apr 2023 08:14:37 +0000 Subject: [PATCH 5/7] JsonRpcEngine: Fix push signature --- src/JsonRpcEngine.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/JsonRpcEngine.ts b/src/JsonRpcEngine.ts index d7dfb43..2048380 100644 --- a/src/JsonRpcEngine.ts +++ b/src/JsonRpcEngine.ts @@ -142,8 +142,10 @@ export class JsonRpcEngine extends SafeEventEmitter { * @deprecated Use {@link JsonRpcEngine.addMiddleware} instead. * @param middleware - The middleware function to add. */ - push(middleware: JsonRpcMiddleware): void { - return this.addMiddleware(middleware); + push( + middleware: JsonRpcMiddleware, + ): void { + this.addMiddleware(middleware); } /** From eb30b5db4e9ba2bd4f06d34b885fabb6e4fd0602 Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Wed, 19 Apr 2023 08:14:54 +0000 Subject: [PATCH 6/7] lint:fix --- src/DuplexJsonRpcEngine.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/DuplexJsonRpcEngine.ts b/src/DuplexJsonRpcEngine.ts index 5adb0f4..24f064e 100644 --- a/src/DuplexJsonRpcEngine.ts +++ b/src/DuplexJsonRpcEngine.ts @@ -4,6 +4,7 @@ import { JsonRpcRequest, JsonRpcResponse, } from '@metamask/utils'; + import { JsonRpcEngine, JsonRpcMiddleware, @@ -15,10 +16,10 @@ type HandleArgument = | JsonRpcNotification | (JsonRpcRequest | JsonRpcNotification)[]; -interface DuplexJsonRpcEngineArgs { +type DuplexJsonRpcEngineArgs = { receiverNotificationHandler: JsonRpcNotificationHandler; senderNotificationHandler: JsonRpcNotificationHandler; -} +}; export class DuplexJsonRpcEngine { readonly #receiver: JsonRpcEngine; @@ -51,10 +52,8 @@ export class DuplexJsonRpcEngine { * * @param middleware - The middleware function to add. */ - addReceiverMiddleware( - middleware: JsonRpcMiddleware, - ): void { - this.#receiver.addMiddleware(middleware as JsonRpcMiddleware); + addReceiverMiddleware(middleware: JsonRpcMiddleware): void { + this.#receiver.addMiddleware(middleware); } /** @@ -63,7 +62,7 @@ export class DuplexJsonRpcEngine { * @param middleware - The middleware function to add. */ addSenderMiddleware(middleware: JsonRpcMiddleware): void { - this.#sender.addMiddleware(middleware as JsonRpcMiddleware); + this.#sender.addMiddleware(middleware); } /** From 1024780bafaa2ad9594d1e37adb1dafb672cf0ab Mon Sep 17 00:00:00 2001 From: legobt <6wbvkn0j@anonaddy.me> Date: Wed, 19 Apr 2023 08:35:35 +0000 Subject: [PATCH 7/7] fix: align types with upstream changes after rebase --- src/DuplexJsonRpcEngine.ts | 40 ++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/DuplexJsonRpcEngine.ts b/src/DuplexJsonRpcEngine.ts index 24f064e..cc5473a 100644 --- a/src/DuplexJsonRpcEngine.ts +++ b/src/DuplexJsonRpcEngine.ts @@ -1,6 +1,8 @@ import { isJsonRpcRequest, + Json, JsonRpcNotification, + JsonRpcParams, JsonRpcRequest, JsonRpcResponse, } from '@metamask/utils'; @@ -12,13 +14,13 @@ import { } from './JsonRpcEngine'; type HandleArgument = - | JsonRpcRequest - | JsonRpcNotification - | (JsonRpcRequest | JsonRpcNotification)[]; + | JsonRpcRequest + | JsonRpcNotification + | (JsonRpcRequest | JsonRpcNotification)[]; type DuplexJsonRpcEngineArgs = { - receiverNotificationHandler: JsonRpcNotificationHandler; - senderNotificationHandler: JsonRpcNotificationHandler; + receiverNotificationHandler: JsonRpcNotificationHandler; + senderNotificationHandler: JsonRpcNotificationHandler; }; export class DuplexJsonRpcEngine { @@ -52,7 +54,9 @@ export class DuplexJsonRpcEngine { * * @param middleware - The middleware function to add. */ - addReceiverMiddleware(middleware: JsonRpcMiddleware): void { + addReceiverMiddleware( + middleware: JsonRpcMiddleware, + ): void { this.#receiver.addMiddleware(middleware); } @@ -61,7 +65,9 @@ export class DuplexJsonRpcEngine { * * @param middleware - The middleware function to add. */ - addSenderMiddleware(middleware: JsonRpcMiddleware): void { + addSenderMiddleware( + middleware: JsonRpcMiddleware, + ): void { this.#sender.addMiddleware(middleware); } @@ -71,7 +77,7 @@ export class DuplexJsonRpcEngine { * * @returns The receiving pipeline as a middleware function. */ - receiverAsMiddleware(): JsonRpcMiddleware { + receiverAsMiddleware(): JsonRpcMiddleware { return this.#receiver.asMiddleware(); } @@ -81,7 +87,7 @@ export class DuplexJsonRpcEngine { * * @returns The sending pipeline as a middleware function. */ - senderAsMiddleware(): JsonRpcMiddleware { + senderAsMiddleware(): JsonRpcMiddleware { return this.#sender.asMiddleware(); } @@ -91,7 +97,7 @@ export class DuplexJsonRpcEngine { * @param request - The JSON-RPC request to receive. * @returns The JSON-RPC response. */ - receive( + receive( request: JsonRpcRequest, ): Promise>; @@ -100,7 +106,9 @@ export class DuplexJsonRpcEngine { * * @param notification - The notification to receive. */ - receive(notification: JsonRpcNotification): Promise; + receive( + notification: JsonRpcNotification, + ): Promise; /** * Receive an array of JSON-RPC requests and/or notifications, and return an @@ -109,7 +117,7 @@ export class DuplexJsonRpcEngine { * @param request - The JSON-RPC requests to receive. * @returns An array of JSON-RPC responses. */ - receive( + receive( requests: (JsonRpcRequest | JsonRpcNotification)[], ): Promise[]>; @@ -128,7 +136,7 @@ export class DuplexJsonRpcEngine { * @param request - The JSON-RPC request to send. * @returns The JSON-RPC response. */ - send( + send( request: JsonRpcRequest, ): Promise>; @@ -137,7 +145,9 @@ export class DuplexJsonRpcEngine { * * @param notification - The notification to send. */ - send(notification: JsonRpcNotification): Promise; + send( + notification: JsonRpcNotification, + ): Promise; /** * Send an array of JSON-RPC requests and/or notifications, and receive an @@ -146,7 +156,7 @@ export class DuplexJsonRpcEngine { * @param request - The JSON-RPC requests to send. * @returns An array of JSON-RPC responses. */ - send( + send( requests: (JsonRpcRequest | JsonRpcNotification)[], ): Promise[]>;