From 2ad52ec76df58023930fd92bae629f31ba35e87d Mon Sep 17 00:00:00 2001 From: Whymarrh Whitby Date: Mon, 7 Sep 2020 11:16:52 -0230 Subject: [PATCH 1/4] Use yargs@15.4.1 (#65) --- merged-packages/json-rpc-engine/yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/merged-packages/json-rpc-engine/yarn.lock b/merged-packages/json-rpc-engine/yarn.lock index f04fd599099..ce1560ade8d 100644 --- a/merged-packages/json-rpc-engine/yarn.lock +++ b/merged-packages/json-rpc-engine/yarn.lock @@ -2437,10 +2437,10 @@ yargs-parser@13.1.2, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^16.1.0: - version "16.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" - integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" @@ -2471,9 +2471,9 @@ yargs@13.3.2, yargs@^13.3.0: yargs-parser "^13.1.2" yargs@^15.0.2: - version "15.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219" - integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg== + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== dependencies: cliui "^6.0.0" decamelize "^1.2.0" @@ -2485,4 +2485,4 @@ yargs@^15.0.2: string-width "^4.2.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^16.1.0" + yargs-parser "^18.1.2" From f4d6930714976afa311a22b75c24ec8e132339ed Mon Sep 17 00:00:00 2001 From: Erik Marks <25517051+rekmarks@users.noreply.github.com> Date: Sun, 25 Oct 2020 19:10:48 -0700 Subject: [PATCH 2/4] Fix some type issues (#66) * Fix some type errors * More fixup * fixup! More fixup * Remove needlessly complicated XOR type * fixup! Remove needlessly complicated XOR type --- .../json-rpc-engine/src/index.d.ts | 66 +++++++++++-------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/merged-packages/json-rpc-engine/src/index.d.ts b/merged-packages/json-rpc-engine/src/index.d.ts index 44a264b5715..a0ce730eb5a 100644 --- a/merged-packages/json-rpc-engine/src/index.d.ts +++ b/merged-packages/json-rpc-engine/src/index.d.ts @@ -1,63 +1,77 @@ import { IEthereumRpcError } from 'eth-rpc-errors/@types' -/** A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0". */ +/** + * A String specifying the version of the JSON-RPC protocol. + * MUST be exactly "2.0". + */ export type JsonRpcVersion = "2.0"; /** Method names that begin with the word rpc followed by a period character * (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions - * and MUST NOT be used for anything else. */ + * and MUST NOT be used for anything else. + */ export type JsonRpcReservedMethod = string; -/** An identifier established by the Client that MUST contain a String, Number, - * or NULL value if included. If it is not included it is assumed to be a - * notification. The value SHOULD normally not be Null and Numbers SHOULD - * NOT contain fractional parts [2] */ +/** + * An identifier established by the Client that MUST contain a String, Number, + * or NULL value if included. If it is not included it is assumed to be a + * notification. The value SHOULD normally not be Null and Numbers SHOULD + * NOT contain fractional parts. + */ export type JsonRpcId = number | string | void; -interface JsonRpcError extends IEthereumRpcError {} +export interface JsonRpcError extends IEthereumRpcError {} -interface JsonRpcRequest { +export interface JsonRpcRequest { jsonrpc: JsonRpcVersion; method: string; id: JsonRpcId; params?: T; } -interface JsonRpcNotification extends JsonRpcResponse { +export interface JsonRpcNotification { jsonrpc: JsonRpcVersion; + method: string, params?: T; } -interface JsonRpcResponse { - result?: any; - error?: JsonRpcError; - jsonrpc: JsonRpcVersion; - id: JsonRpcId; +interface JsonRpcResponseBase { + jsonrpc: JsonRpcVersion, + id: JsonRpcId, } -interface JsonRpcSuccess extends JsonRpcResponse { - result: any; +export interface JsonRpcSuccess extends JsonRpcResponseBase { + result: T; } -interface JsonRpcFailure extends JsonRpcResponse { - error: JsonRpcError; +export interface JsonRpcFailure extends JsonRpcResponseBase { + error: JsonRpcError; } -type JsonRpcEngineEndCallback = (error?: JsonRpcError) => void; -type JsonRpcEngineNextCallback = (returnFlightCallback?: (done: () => void) => void) => void; +export type JsonRpcResponse = JsonRpcSuccess | JsonRpcFailure -interface JsonRpcMiddleware { +export type JsonRpcEngineEndCallback = (error?: JsonRpcError) => void; +export type JsonRpcEngineNextCallback = ( + returnFlightCallback?: (done: () => void) => void, +) => void; + +export interface JsonRpcMiddleware { ( - req: JsonRpcRequest, - res: JsonRpcResponse, + req: JsonRpcRequest, + res: JsonRpcResponse, next: JsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, ) : void; } -interface JsonRpcEngine { +export interface JsonRpcEngine { push: (middleware: JsonRpcMiddleware) => void; - handle: (req: JsonRpcRequest, callback: (error: JsonRpcError, res: JsonRpcResponse) => void) => void; + handle: ( + req: JsonRpcRequest, + callback: ( + error: JsonRpcError, + res: JsonRpcResponse, + ) => void, + ) => void; } - From c6d49a755c7adb129a1ac63a01d775670925952e Mon Sep 17 00:00:00 2001 From: Erik Marks <25517051+rekmarks@users.noreply.github.com> Date: Sat, 7 Nov 2020 19:58:19 -0800 Subject: [PATCH 3/4] Add missing types, fix remaining faulty ones (#67) * Add missing types, fix faulty ones --- .../json-rpc-engine/src/index.d.ts | 49 +++++++++++++++++-- merged-packages/json-rpc-engine/src/index.js | 4 +- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/merged-packages/json-rpc-engine/src/index.d.ts b/merged-packages/json-rpc-engine/src/index.d.ts index a0ce730eb5a..1034250c587 100644 --- a/merged-packages/json-rpc-engine/src/index.d.ts +++ b/merged-packages/json-rpc-engine/src/index.d.ts @@ -1,11 +1,10 @@ - import { IEthereumRpcError } from 'eth-rpc-errors/@types' /** * A String specifying the version of the JSON-RPC protocol. * MUST be exactly "2.0". */ -export type JsonRpcVersion = "2.0"; +export type JsonRpcVersion = '2.0'; /** Method names that begin with the word rpc followed by a period character * (U+002E or ASCII 46) are reserved for rpc-internal methods and extensions @@ -52,17 +51,32 @@ export interface JsonRpcFailure extends JsonRpcResponseBase { export type JsonRpcResponse = JsonRpcSuccess | JsonRpcFailure export type JsonRpcEngineEndCallback = (error?: JsonRpcError) => void; + +type ReturnHandlerCallback = (done: (error?: Error) => void) => void + export type JsonRpcEngineNextCallback = ( - returnFlightCallback?: (done: () => void) => void, + returnHandlerCallback?: ReturnHandlerCallback, ) => void; +export type AsyncJsonRpcEngineNextCallback = ( + returnHandlerCallback?: ReturnHandlerCallback, +) => Promise; + export interface JsonRpcMiddleware { ( req: JsonRpcRequest, res: JsonRpcResponse, next: JsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, - ) : void; + ): void; +} + +export interface AsyncJsonrpcMiddleware { + ( + req: JsonRpcRequest, + res: JsonRpcResponse, + next: AsyncJsonRpcEngineNextCallback, + ): Promise; } export interface JsonRpcEngine { @@ -75,3 +89,30 @@ export interface JsonRpcEngine { ) => void, ) => void; } + +export interface asMiddleware { + (engine: JsonRpcEngine): JsonRpcMiddleware; +} + +export interface createAsyncMiddleware { + (asyncMiddleware: AsyncJsonrpcMiddleware): JsonRpcMiddleware; +} + +type Serializable = boolean | number | string | Record | unknown[] | null | undefined; +type ScaffoldMiddlewareHandler = T extends Function ? JsonRpcMiddleware : Serializable; + +export interface createScaffoldMiddleware { + (handlers: {[methodName: string]: ScaffoldMiddlewareHandler}): JsonRpcMiddleware; +} + +export interface createIdRemapMiddleware { + (): JsonRpcMiddleware; +} + +export interface mergeMiddleware { + (middlewares: JsonRpcMiddleware[]): JsonRpcMiddleware; +} + +export interface getUniqueId { + (): number; +} diff --git a/merged-packages/json-rpc-engine/src/index.js b/merged-packages/json-rpc-engine/src/index.js index b2429bd4d3a..21079ad27e3 100644 --- a/merged-packages/json-rpc-engine/src/index.js +++ b/merged-packages/json-rpc-engine/src/index.js @@ -7,7 +7,7 @@ const { ERROR_CODES, } = require('eth-rpc-errors') -module.exports = class RpcEngine extends SafeEventEmitter { +module.exports = class JsonRpcEngine extends SafeEventEmitter { constructor () { super() this._middleware = [] @@ -133,7 +133,7 @@ module.exports = class RpcEngine extends SafeEventEmitter { // go down stack of middleware, call and collect optional returnHandlers for (const middleware of this._middleware) { - isComplete = await RpcEngine._runMiddleware( + isComplete = await JsonRpcEngine._runMiddleware( req, res, middleware, returnHandlers, ) if (isComplete) { From 2d6cc118d50ed3e67931d09778906a5a8e200b32 Mon Sep 17 00:00:00 2001 From: Erik Marks <25517051+rekmarks@users.noreply.github.com> Date: Sun, 8 Nov 2020 18:10:09 -0800 Subject: [PATCH 4/4] 5.4.0 (#68) * 5.4.0 * Update changelog --- merged-packages/json-rpc-engine/CHANGELOG.md | 8 +++++++- merged-packages/json-rpc-engine/package.json | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/merged-packages/json-rpc-engine/CHANGELOG.md b/merged-packages/json-rpc-engine/CHANGELOG.md index 31b39c9a0fb..e4c567ab791 100644 --- a/merged-packages/json-rpc-engine/CHANGELOG.md +++ b/merged-packages/json-rpc-engine/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [5.4.0] - 2020-11-07 + +### Changed + +- Make the TypeScript types not terrible ([#66](https://github.com/MetaMask/json-rpc-engine/pull/66), [#67](https://github.com/MetaMask/json-rpc-engine/pull/67)) + ## [5.3.0] - 2020-07-30 ### Changed @@ -25,5 +31,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Remove `async` and `promise-to-callback` dependencies - These dependencies were used internally for middleware flow control. They have been replaced with Promises and native `async`/`await`, which means that some operations are _no longer_ eagerly executed. - This change may affect consumers that depend on the eager execution of middleware _during_ middleware execution, _outside of_ middleware functions and request handlers. + This change may affect consumers that depend on the eager execution of middleware _during_ request processing, _outside of_ middleware functions and request handlers. - In general, it is a bad practice to work with state that depends on middleware execution, while the middleware are executing. diff --git a/merged-packages/json-rpc-engine/package.json b/merged-packages/json-rpc-engine/package.json index 5324ceea688..be912bcee41 100644 --- a/merged-packages/json-rpc-engine/package.json +++ b/merged-packages/json-rpc-engine/package.json @@ -1,6 +1,6 @@ { "name": "json-rpc-engine", - "version": "5.3.0", + "version": "5.4.0", "description": "a tool for processing JSON RPC", "license": "ISC", "author": "kumavis",