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", diff --git a/merged-packages/json-rpc-engine/src/index.d.ts b/merged-packages/json-rpc-engine/src/index.d.ts index 44a264b5715..1034250c587 100644 --- a/merged-packages/json-rpc-engine/src/index.d.ts +++ b/merged-packages/json-rpc-engine/src/index.d.ts @@ -1,63 +1,118 @@ - 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"; +/** + * 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 + +export type JsonRpcEngineEndCallback = (error?: JsonRpcError) => void; + +type ReturnHandlerCallback = (done: (error?: Error) => void) => void + +export type JsonRpcEngineNextCallback = ( + returnHandlerCallback?: ReturnHandlerCallback, +) => void; -interface JsonRpcMiddleware { +export type AsyncJsonRpcEngineNextCallback = ( + returnHandlerCallback?: ReturnHandlerCallback, +) => Promise; + +export interface JsonRpcMiddleware { ( - req: JsonRpcRequest, - res: JsonRpcResponse, + req: JsonRpcRequest, + res: JsonRpcResponse, next: JsonRpcEngineNextCallback, end: JsonRpcEngineEndCallback, - ) : void; + ): void; } -interface JsonRpcEngine { +export interface AsyncJsonrpcMiddleware { + ( + req: JsonRpcRequest, + res: JsonRpcResponse, + next: AsyncJsonRpcEngineNextCallback, + ): Promise; +} + +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; +} + +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) { 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"