diff --git a/packages/jsonrpc/src/express.ts b/packages/jsonrpc/src/express.ts index e6e3528..5126ac6 100644 --- a/packages/jsonrpc/src/express.ts +++ b/packages/jsonrpc/src/express.ts @@ -1,3 +1,4 @@ +import {FunctionPropertyNames} from './types' import {NextFunction, Request, Response, Router} from 'express' export const ERROR_PARSE = { @@ -34,7 +35,7 @@ export interface ISuccessResponse { error: null } -export interface IJsonRpcError { +export interface IJSONRPCError { code: number message: string data: T @@ -44,10 +45,10 @@ export interface IErrorResponse { jsonrpc: '2.0' id: number | null result: null - error: IJsonRpcError + error: IJSONRPCError } -export type IRpcResponse = ISuccessResponse | IErrorResponse +export type IRPCResponse = ISuccessResponse | IErrorResponse export function createSuccessResponse(id: number, result: T) : ISuccessResponse { @@ -60,7 +61,7 @@ export function createSuccessResponse(id: number, result: T) } export function createErrorResponse( - id: number | null, error: IJsonRpcError) + id: number | null, error: IJSONRPCError) : IErrorResponse { return { jsonrpc: '2.0', @@ -70,11 +71,6 @@ export function createErrorResponse( } } -export type FunctionPropertyNames = { - // tslint:disable-next-line - [K in keyof T]: T[K] extends Function ? K : never -}[keyof T] - export function pick>(t: T, keys: K[]) : Pick { return keys.reduce((obj, key) => { @@ -91,16 +87,18 @@ function isPromise(value: any): value is Promise { typeof value.then === 'function' && typeof value.catch === 'function' } +export type TGetContext = (req: Request) => Context + /** * Adds middleware for handling JSON RPC requests. Expects JSON middleware to * already be configured. */ -export function jsonrpc, Ctx>( +export function jsonrpc, Context>( service: T, - functions: F[], - getContext: (req: Request) => Ctx, + methods: F[], + getContext: TGetContext, ) { - const rpcService = pick(service, functions) + const rpcService = pick(service, methods) const router = Router() diff --git a/packages/jsonrpc/src/index.ts b/packages/jsonrpc/src/index.ts index 511c57a..603f87f 100644 --- a/packages/jsonrpc/src/index.ts +++ b/packages/jsonrpc/src/index.ts @@ -2,3 +2,4 @@ export * from './express' export * from './local' export * from './redux' export * from './remote' +export * from './types' diff --git a/packages/jsonrpc/src/remote.test.ts b/packages/jsonrpc/src/remote.test.ts index 72819ad..d262254 100644 --- a/packages/jsonrpc/src/remote.test.ts +++ b/packages/jsonrpc/src/remote.test.ts @@ -7,7 +7,7 @@ import express from 'express' import {AddressInfo} from 'net' import {Server} from 'http' import {createRemoteClient} from './remote' -import {jsonrpc} from './server' +import {jsonrpc} from './express' import {keys} from 'ts-transformer-keys' describe('remote', () => { diff --git a/packages/jsonrpc/src/remote.ts b/packages/jsonrpc/src/remote.ts index fe6606d..a08fb36 100644 --- a/packages/jsonrpc/src/remote.ts +++ b/packages/jsonrpc/src/remote.ts @@ -1,10 +1,10 @@ import Axios from 'axios' -import {TAsyncified} from './types' +import {FunctionPropertyNames, TAsyncified} from './types' export function createRemoteClient( baseUrl: string, url: string, - methods: Array, + methods: Array>, ) { const axios = Axios.create({ baseURL: baseUrl, diff --git a/packages/jsonrpc/src/types.ts b/packages/jsonrpc/src/types.ts index f318099..95dd5df 100644 --- a/packages/jsonrpc/src/types.ts +++ b/packages/jsonrpc/src/types.ts @@ -1,3 +1,5 @@ +import {IPendingAction, IResolvedAction, IRejectedAction} from '@rondo/client' + type ArgumentTypes = T extends (...args: infer U) => infer R ? U : never type RetType = T extends (...args: any[]) => infer R ? R : never @@ -7,7 +9,9 @@ type RetProm = T extends Promise ? T : Promise type PromisifyReturnType = (...a: ArgumentTypes) => RetProm>> -import {IPendingAction, IResolvedAction, IRejectedAction} from '@rondo/client' +export type FunctionPropertyNames = { + [K in keyof T]: T[K] extends (...args: any[]) => any ? K : never +}[keyof T] export type TAsyncified = { [K in keyof T]: PromisifyReturnType